So, I had a crack at this in scraps of spare time.
After a bit of faffing getting AntTP to play nicely with a local test network, the actual changes were relatively easy.
I changed the logic of POST pointer to accept both an owner
private key and an address
public key.
I then updated the AntTP REST endpoints to allow the GET/PUT pointer endpoints to accept a ‘name’, instead of an address.
The underlying ant client libraries and ant node functionality was also changed to accommodate separate owner/address keys.
The result:
- You can derive the address from an arbitrary string for both GET and PUT (update). You need to know a common seed secret key, but given we only need it to derive the public key, sharing it is fine (it doesn’t imply ownership, etc).
- Associating the pointer with a chunk, allows Autonomi to become a huge key/value store of chunks (or mutables).
- This could be leveraged in many ways, including DNS style name lookups for chunks (or other mutables).
- It decouples ownership from addressing. One person can create/update a pointer, derived from their private key and an arbitrary string (a ‘name’). Anyone else can derive the address of the pointer from a separate/shared ‘private’ key.
Next…
- I want to try changing the address and/or owner of the pointer. Right now, this doesn’t work as the originals are used to 1) check ownership and 2) check uniqueness of the address. Maybe ‘new_owner’ and ‘new_address’ fields will be needed, which then get switched during ant node checks/persists.
- Once owner can be changed, obviously it means a different person can mutate the data or it can be sent to a burn address to make it immutable and/or ‘burnt’.
- As above, this is basically NFTs working right of the gates too (first to create the pointer with the known private key + name, gets to own the pointer (and therefore the NFT).
- This is obviously a simple pointer type, but I see no reason why the other types couldn’t be changed/cloned to allow similar functionality.
Obviously, these are breaking changes to the network. They work on my local network, but the changes would need to be supported by production nodes to be rolled out. However, it’s been very interesting understanding how straightforward it is to change these types.
It’s also been interesting to understand the role of evm-testnet
and how it is present on local networks. I wonder how embedded this is in the flows and how easily it could be substituted for token exchange (i.e. mutable data ownership change) for payments. Minting is a whole other kettle of fish, but understanding ‘payments’ is something I want to dig into more.
It also doesn’t cover things like splitting, minting, etc. However, I wanted to prove out splitting ownership from addressing first, as that unlocks the first steps.