3. DFA数字积分合约

DFA数字积分合约是一个基于区块链技术的同质化通证解决方案,旨在为企业和组织提供一种安全、可靠且易于管理的数字积分系统。本质上,DFA数字积分合约类似于以太坊的ERC20通证合约,支持创建、发行和管理数字积分。

DFA数字积分合约具有以下功能:

  1. 创建和发行数字积分:企业和组织可以通过DFA数字积分合约创建和发行自己的数字积分,用于奖励用户、员工或合作伙伴。

  2. 转账和交易:用户可以在DFA数字积分合约的支持下进行数字积分的转账和交易。

  3. 查询余额和交易记录:用户可以通过DFA数字积分合约查询自己的数字积分余额和交易记录。

  4. 积分授权:用户可以将数字积分授权给另一个用户或者合约使用。

DFA数字积分合约适用于以下场景:

  1. 用户奖励:企业和组织可以通过发行数字积分,奖励用户在平台上的活跃行为,如购物、评论、分享等。

  2. 员工激励:企业可以将数字积分作为员工的绩效奖金,激励员工提高工作效率和质量。

  3. 合作伙伴激励:企业可以通过数字积分奖励合作伙伴,以促进业务合作和资源共享。

  4. 营销活动:企业可以利用数字积分进行营销活动,如积分兑换、积分抽奖等,以吸引新用户和提高用户粘性。

  5. 积分生态建设:企业和组织可以将数字积分与实体商户、线上平台等合作伙伴连接,构建积分生态,实现积分的多样化应用。

3.1. 合约标准

数字积分服务利用区块链的透明性、安全性和不可篡改性,为用户提供一个可信赖的积分获取、使用和管理的环境。我们基于长安链非同质化数字资产合约标准CM-CS-221221-DFA,定义了CMDFA接口 实现了数字积分合约,通过该合约实现了数字积分的区块链上链能力。在该平台,可以轻松实现一键发行自己的积分。 主要合约接口标准参考: 长安链CM-CS-231201-DFA(CMDFA-2)同质化数字资产类合约标准

DFA合约源码参考:https://git.chainmaker.org.cn/contracts/contracts-go/-/tree/chainweaver_v0.1/standard-dfa

3.2. 调用示例

在cmc命令行下,可以快速安装、调用和查询该DFA合约,使用示例如下:

3.2.1. 安装合约

Token名:CM DFA 符号名:DFA 小数位数:8

./cmc client contract user create --contract-name=cmdfa --version=1.0 --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml --byte-code-path=./testdata/cmdfa.7z --runtime-type=DOCKER_GO --admin-crt-file-paths=./testdata/crypto-config/wx-org.chainmaker.org/user/admin1/admin1.sign.crt --admin-key-file-paths=./testdata/crypto-config/wx-org.chainmaker.org/user/admin1/admin1.sign.key --params="{\"name\":\"CM DFA\", \"symbol\":\"DFA\", \"decimals\":\"8\"}"

3.2.2. 铸造Token

铸造10个Token,因为小数位数为8,所以参数的数量是:1000000000

./cmc client contract user invoke --contract-name=cmdfa --method=Mint --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml --params="{\"account\":\"自己的地址\", \"amount\":\"1000000000\"}"

3.2.3. 查询余额

./cmc client contract user get --contract-name=cmdfa --method=BalanceOf --sdk-conf-path=./testdata/sdk_config_solo.yml --params="{\"account\":\"自己的地址\"}"

3.2.4. 转账1个Token

转移1个Token,因为小数位数为8,所以参数的数量是:100000000

./cmc client contract user invoke --contract-name=cmdfa --method=Transfer --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml --params="{\"to\":\"UserB的地址\", \"amount\":\"100000000\"}"

3.2.5. 销毁1个Token

./cmc client contract user invoke --contract-name=cmdfa --method=Burn --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml --params="{\"amount\":\"100000000\"}"

3.2.6. 查询Token的名字

./cmc client contract user get --contract-name=cmdfa --method=Name --sdk-conf-path=./testdata/sdk_config_solo.yml --params="{}"

3.2.7. 查询Token的符号

./cmc client contract user get --contract-name=cmdfa --method=Symbol --sdk-conf-path=./testdata/sdk_config_solo.yml --params="{}"

3.2.8. 查询Token的小数位数

./cmc client contract user get --contract-name=cmdfa --method=Decimals --sdk-conf-path=./testdata/sdk_config_solo.yml --params="{}"

3.2.9. 查询Token的发行量

./cmc client contract user get --contract-name=cmdfa --method=TotalSupply --sdk-conf-path=./testdata/sdk_config_solo.yml --params="{}"

3.2.10. 授权转移操作

3.2.10.1. 授权3个Token给用户C

./cmc client contract user invoke --contract-name=cmdfa --method=Approve --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml --params="{\"spender\":\"UserC的地址\", \"amount\":\"300000000\"}"

3.2.10.2. C用户转移Token给用户B

因为是用的UserC的身份,所以需要切换SDK_Config到UserC的对应配置

./cmc client contract user invoke --contract-name=cmdfa --method=TransferFrom --sync-result=true --sdk-conf-path=./testdata/sdk_config_UserC.yml --params="{\"from\":\"UserA的地址\",\"to\":\"UserB的地址\", \"amount\":\"100000000\"}"

3.2.10.3. 查询用户A授权给用户C的转移额度

本来授权了3Token,现在转移了1个,所以结果应该2Token

./cmc client contract user get --contract-name=cmdfa --method=Allowance --sdk-conf-path=./testdata/sdk_config_UserC.yml --params="{\"spender\":\"UserC的地址\",\"owner\":\"UserA的地址\"}"

3.2.10.4. UserC从授权账户UserA销毁1Token

因为是用的UserC的身份,所以需要切换SDK_Config到UserC的对应配置

./cmc client contract user invoke --contract-name=cmdfa --method=BurnFrom --sync-result=true --sdk-conf-path=./testdata/sdk_config_UserC.yml --params="{\"account\":\"UserA的地址\", \"amount\":\"100000000\"}"