Skip to content
33cn edited this page Dec 6, 2018 · 4 revisions

用户资产的存储结构:

// Account 的信息
message Account {
    // coins标识,目前只有0 一个值
    int32 currency = 1;
    //账户可用余额
    int64 balance = 2;
    //账户冻结余额
    int64 frozen = 3;
    //账户的地址
    string addr = 4;
}

currency = 0 表示可切分资产,后面可能会引入不可切分的资产。

资产的操作:

在一个合约中,资产有三种操作

//资产控制权转移给合约
message AssetsTransferToExec {
    string cointoken = 1;
    int64  amount    = 2;
    bytes  note      = 3;
    string execName  = 4;
    string to        = 5;
}
//从合约中转回资产控制权
message AssetsWithdraw {
    string cointoken = 1;
    int64  amount    = 2;
    bytes  note      = 3;
    string execName  = 4;
    string to        = 5;
}
//资产在合约内部转移
message AssetsTransfer {
    string cointoken = 1;
    int64  amount    = 2;
    bytes  note      = 3;
    string to        = 4;
}

合约内的资产操作:

资产控制权给合约后,合约可以任意控制资产,主要是要支持下面几种操作:

//冻结资产
ExecFrozen
//解冻资产
ExecActive
//给账户减少活动资产
ExecWithraw
//给账户增加活动资产
ExecDeposit
//这个可以通过 ExecDeposit 和 ExecWithraw 组合出来,但是因为比较常见,我们也作为一个操作
ExecTransfer

资产的数据库KV

chain33 整个系统的状态是基于 KV 设计的,所以,资产作为一种重要的状态,有特定的Key-Value 值。

资产在资产发行合约中

比如 BTY 在 coins 合约中, TEST 在token 合约中

//eg: mavl-coins-BTY-14KEKbYtKKQm4wMthSK9J4La4nAiidGozt , mavl-token-TEST-14KEKbYtKKQm4wMthSK9J4La4nAiidGozt
key=mavl-execer-symbol-addr 
value=protobuffer encode Account

资产控制权转移到其他合约中

比如 coins 合约中的 BTY 转移到了 token 合约中

//eg: mavl-coins-BTY-exec-16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp:14KEKbYtKKQm4wMthSK9J4La4nAiidGozt
key=mavl-execer-symbol-exec-ExecAddress(token):addr
value=protobuffer encode Account
Clone this wiki locally