# DFA数字积分合约 DFA数字积分合约是一个基于区块链技术的同质化通证解决方案,旨在为企业和组织提供一种安全、可靠且易于管理的数字积分系统。本质上,DFA数字积分合约类似于以太坊的ERC20通证合约,支持创建、发行和管理数字积分。 DFA数字积分合约具有以下功能: 1. **创建和发行数字积分**:企业和组织可以通过DFA数字积分合约创建和发行自己的数字积分,用于奖励用户、员工或合作伙伴。 2. **转账和交易**:用户可以在DFA数字积分合约的支持下进行数字积分的转账和交易。 3. **查询余额和交易记录**:用户可以通过DFA数字积分合约查询自己的数字积分余额和交易记录。 4. **积分授权**:用户可以将数字积分授权给另一个用户或者合约使用。 DFA数字积分合约适用于以下场景: 1. **用户奖励**:企业和组织可以通过发行数字积分,奖励用户在平台上的活跃行为,如购物、评论、分享等。 2. **员工激励**:企业可以将数字积分作为员工的绩效奖金,激励员工提高工作效率和质量。 3. **合作伙伴激励**:企业可以通过数字积分奖励合作伙伴,以促进业务合作和资源共享。 4. **营销活动**:企业可以利用数字积分进行营销活动,如积分兑换、积分抽奖等,以吸引新用户和提高用户粘性。 5. **积分生态建设**:企业和组织可以将数字积分与实体商户、线上平台等合作伙伴连接,构建积分生态,实现积分的多样化应用。 ## 合约标准 数字积分服务利用区块链的透明性、安全性和不可篡改性,为用户提供一个可信赖的积分获取、使用和管理的环境。我们基于长安链非同质化数字资产合约标准`CM-CS-221221-DFA`,定义了[CMDFA接口](https://git.chainmaker.org.cn/chainmaker/contract-utils/-/blob/master/standard/CMDFA.go) 实现了数字积分合约,通过该合约实现了数字积分的区块链上链能力。在该平台,可以轻松实现一键发行自己的积分。 主要合约接口标准参考: [长安链CM-CS-231201-DFA(CMDFA-2)同质化数字资产类合约标准](https://git.chainmaker.org.cn/contracts/standard/-/blob/master/living/CM-CS-231201-DFA.md) DFA合约源码参考:[https://git.chainmaker.org.cn/contracts/contracts-go/-/tree/chainweaver_v0.1/standard-dfa](https://git.chainmaker.org.cn/contracts/contracts-go/-/tree/chainweaver_v0.1/standard-dfa) ## 调用示例 在cmc命令行下,可以快速安装、调用和查询该DFA合约,使用示例如下: ### 安装合约 Token名:CM DFA 符号名:DFA 小数位数:8 ```sh ./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\"}" ``` ### 铸造Token 铸造10个Token,因为小数位数为8,所以参数的数量是:1000000000 ```sh ./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\"}" ``` ### 查询余额 ```sh ./cmc client contract user get --contract-name=cmdfa --method=BalanceOf --sdk-conf-path=./testdata/sdk_config_solo.yml --params="{\"account\":\"自己的地址\"}" ``` ### 转账1个Token 转移1个Token,因为小数位数为8,所以参数的数量是:100000000 ```sh ./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\"}" ``` ### 销毁1个Token ```sh ./cmc client contract user invoke --contract-name=cmdfa --method=Burn --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml --params="{\"amount\":\"100000000\"}" ``` ### 查询Token的名字 ```sh ./cmc client contract user get --contract-name=cmdfa --method=Name --sdk-conf-path=./testdata/sdk_config_solo.yml --params="{}" ``` ### 查询Token的符号 ```sh ./cmc client contract user get --contract-name=cmdfa --method=Symbol --sdk-conf-path=./testdata/sdk_config_solo.yml --params="{}" ``` ### 查询Token的小数位数 ```sh ./cmc client contract user get --contract-name=cmdfa --method=Decimals --sdk-conf-path=./testdata/sdk_config_solo.yml --params="{}" ``` ### 查询Token的发行量 ```sh ./cmc client contract user get --contract-name=cmdfa --method=TotalSupply --sdk-conf-path=./testdata/sdk_config_solo.yml --params="{}" ``` ### 授权转移操作 #### 授权3个Token给用户C ```sh ./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\"}" ``` #### C用户转移Token给用户B 因为是用的UserC的身份,所以需要切换SDK_Config到UserC的对应配置 ```sh ./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\"}" ``` #### 查询用户A授权给用户C的转移额度 本来授权了3Token,现在转移了1个,所以结果应该2Token ```sh ./cmc client contract user get --contract-name=cmdfa --method=Allowance --sdk-conf-path=./testdata/sdk_config_UserC.yml --params="{\"spender\":\"UserC的地址\",\"owner\":\"UserA的地址\"}" ``` #### UserC从授权账户UserA销毁1Token 因为是用的UserC的身份,所以需要切换SDK_Config到UserC的对应配置 ```sh ./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\"}" ```