erc721
Actions
Actions | Description |
---|---|
mint to address with oracle approvals | |
burn (called by user) | |
register oracle | |
unregister oracle | |
register custodian | |
unregister custodian | |
getOracle | Get oracle status by ethereum address |
getCustodian | Get custodian status by ethereum address |
getApproval | getApproval status by obtid |
tokenURI | retrieve JSON information about NFT |
setBaseURI | Change the baseURI path (custodian only) |
_baseURI | Retrieve baseURI path (used as first portion of tokenURI) |
State Variables
State variables | Description |
---|---|
custodian_count | Keeps track of the number of custodians active in the oracle. Required for consensus math |
oracle_count | Keeps track of the number of custodians active in the oracle. Required for consensus math |
uoracmapv | Incrementer used to generate unique id for unregoracle approval mapping |
roracmapv | Incrementer used to generate unique id for regoracle approval mapping |
ucustmapv | Incrementer used to generate unique id for unregcust approval mapping |
rcustmapv | Incrementer used to generate unique id for regcust approval mapping |
owner | Used to store contract owner (msg.sender) when deployed |
oraclelist | list of active oracles |
_baseURIextended | Stored baseURI |
attribute[] | Holds the domain names for each tokenID 1:1 |
Events
Events | Description |
---|---|
wrapped | Event emitted when wrap has completed. |
unwrapped | Event emitted when user has unwrapped NFT. |
custodian_registered | Event emitted when a custodian has been registered |
custodian_unregistered | Event emitted when a custodian has been unregistered |
oracle_registered | Event emitted when an oracle has been registered |
oracle_unregistered | Event emitted when an oracle has been unregistered |
...
Issue | Summary | Decision |
---|---|---|
Max transaction size | Should we put a max transaction size limit on mint into the ERC721 contract. | Not needed |
ERC721 contract key | What is the status of the key used to set the contract? | Key should only be used for spinning up the contract and should be burned. |
Oracle “Admin” functions | Do we need to enable the ability for Oracles to call various contract actions such as approve, transfer, mint, etc. This can be performed in a couple of ways: 2 - The Oracles can sign the next transfer action as a multisig | Decision: We do not want any Oracle admin functions. |
Custodian “Admin” functions | Are there contract actions that should be exposed to Custodian “admin” approval?
| TBD: Are there any other contract actions that might be used for “admin” functionality? |
Unwrap fee | Is there a fee for | Yes. Unwrapping user pays the fee |
...
Request is validated per Exception handling.
Consensus required. Transaction is executed when all registered oracles have called
wrap
(submitted their “observation”).Current:
3 oracles call wrap to get it approved
Then, one of the oracles call it again to execute.
Updated:
Adam todo: Do the mint when the 3rd oracle calls
wrap
DONE
NFT is minted and transferred to
account
...
FIO Address
Less likely to be input incorrectly
Requires someone who buys NFT and then wants to unwrap it to own a FIO Address.
Devs agree that FIO Address is probably the cleanest path.
FIO Address hashed
Hash of address somewhat obfuscates the recipient
FIO Pub Key
Would allow for a checksum key check in the contract (which consumes gas). Not sure if the public key checksum is worth it
Current Decision: Use FIO Address
Fees
Alice covers the fee to unwrap
...