Comment on page
Wrapped CW721
The
Wrapped-Cw721
ADO is a smart contract that wraps CW721 tokens. This makes it possible to "upgrade" existing CW721 tokens to leverage our modules. One simple example is if a user wants to leverage our TransferAgreement
functionality to make a trade without the need of a marketplace or escrow service. In this case they can wrap the token, sell the wrapped token, and then the new owner can unwrap to get the original.The
Wrapped-Cw721
ADO is a smart contract that wraps cw721 tokens. This makes it possible to "upgrade" existing cw721 tokens to leverage our modules. One simple example is if a user wants to leverage our TransferAgreement
functionality to make a trade without the need of a marketplace or escrow service. In this case they can wrap the token, sell the wrapped token, and then the new owner can unwrap to get the original.The user can send any CW721 token and get back a "wrapped" version which can utilize our modules. They can also be "unwrapped" back to the underlying token by depositing the wrapped token in the contract (the creator of the contract can specify if unwrapping should be allowed or not as there are some instances where they may want to permanently wrap a token).
The user can deposit any cw721 token and get back a "wrapped" version which can utilize our modules. They can also be "unwrapped" back to the underlying token by depositing the wrapped token in the contract (the creator of the contract can specify if unwrapping should be allowed or not as there are some instances where they may want to permanently wrap a token).
Ado_type: wrapped-cw721
Rust
JSON
pub struct InstantiateMsg {
pub primitive_contract: String,
pub cw721_instantiate_type: InstantiateType,
pub can_unwrap: bool,
pub kernel_address: Option<String>,
}
{
"primitive_contract":"andr1...",
"cw721_instantiate_type":{
"address":"andr1..."
},
"can_unwrap": true,
"kernel_address":"andr1..."
}
Name | Type | Description |
---|---|---|
primitive_contract | String | The primitive contract use to store the factory contract if used. |
cw721_instantiate_type | The cw721 contract can be instantiated or an existing address can be used. In the case that an existing address is used, the minter must be set to be this contract. | |
can_unwrap | bool | Whether or not the cw721 token can be unwrapped once it is wrapped. |
kernel_address | String | Contract address of the kernel contract to be used for AMP messaging. Kernel contract address can be found in our deployed contracts. |
pub enum InstantiateType {
New(Cw721Specification),
Address(String),
}
- New: A new contract that would be instantiated using the
Cw721Specification
struct. The minter for the Cw721 contract is automatically defined as this contract. - Address: An existing contract that will be referenced by the contract address.
pub struct Cw721Specification {
pub name: String,
pub symbol: String,
pub modules: Option<Vec<Module>>,
}
Receives the NFT sent by the user from the CW721 contract defined in the
InstantiateMsg
. When sending an NFT to this contract, the user would send a message to either wrap the sent token, or unwrap it (If allowed). This will be defined depending on the Cw721HookMsg
attached to the Cw721ReceiveMsg
.Rust
pub enum ExecuteMsg {
ReceiveNft(Cw721ReceiveMsg),
}
pub struct Cw721ReceiveMsg {
pub sender: String,
pub token_id: String,
pub msg: Binary,
}
The
msg
in the Cw721ReceiveMsg
should be a base64 encoded binary of a Cw721HookMsg
.pub enum Cw721HookMsg {
Wrap { wrapped_token_id: Option<String> },
Unwrap {},
}
Rust
JSON
pub enum QueryMsg {
#[returns(String)]
NFTContractAddress {},
}
{
"nft_contract_address":{}
}
The contract address is returned as a string.