积分合约模板
简介
BAC001 是一套区块链积分合约,可以积分相关的增发,销毁,暂停合约,黑白名单等权限控制。
四个基本元素
description
此积分的具体描述
shortName
积分简称
minUnit
积分最小单位
totalAmount
积分总数量
五个基本行为:
发行
调用合约的 deploy 方法,传入你初始化的四个元素即可,即在区块链上发行了你指定总量和名称的积分。
- 其中 minUnit 和 totalAmount 不能为负数或小数
转账
调用 send 方法即可实现转账,之后调用 balance 方法可以查看自己的积分余额
增发
调用 issue 方法特定地址增发积分, 并可以通过 addIssuer 增加有权限增发积分的人,也可以通过renounceIssuer 方法移除增发权限
销毁
调用 destory 以及 destoryFrom 销毁自己地址下积分和特定地址下的积分
暂停
遇到紧急状况,你可以调用 suspend 方法,暂停合约,这样任何人都不能调用 send 函数。故障修复后,可以调用 unSuspend 方法解除暂停。也可以通过 addSuspender 和 renounceSuspender 相应增加和移除暂停者权限
使用样例伪码
// 示例中Alice和Bob都为一个外部账号地址。
// 部署合约,即初始化积分,示例初始化信息如下:
// 积分描述:car points
// 积分简称 TTT
// 最小转账单位 1
// 发行总量10000000
// 默认合约部署者为第一个发行者
BAC001 bac001 = BAC001.deploy(web3j, credentials,
contractGasProvider, "car points", "TTT", BigInteger.valueOf(1), BigInteger.valueOf(1000000)).send();
String contractAddress = bac001.getContractAddress();
// 增加积分发行者
bac001.addIssuer(Alice).send();
// 增发积分
bac001.issue(Alice, new BigInteger("10000"),"increase 10000 asset ").send();
// 积分转账,以及积分转账备注 Owner -> Alice
bac001.send(Alice,new BigInteger("10000"),"dinner Points").send();
// 查询积分余额
assertEquals( bac001.balance(Alice).send().toString(),"30000");
接口说明
totalAmount()
返回积分总量
- 这里的积分总量需要计算最小转账单位,所以实际返回值为 totalAmount * 10minUnit
balance(address owner)
返回owner的帐户的积分余额
send(address to, uint256 value , string data)
将数量为value的积分转入地址 to 并触发 transfer 事件, data 是转账备注
- suspend 状态下无法进行此操作
- 请避免 to 为自身进行操作
sendFrom(address from,address to,uint256 value,string data))
将地址 from 中的 value 数量的积分转入地址 to ,并触发 transfer 事件,data 是转账备注。
- 方法的调用者可以不为 from, 此时需要预先进行 approve 授权
- from 不能为调用者自身地址,否则会报错
- suspend 状态下无法执行此操作
safeSendFrom(address from, address to, uint256 value, string data)
安全的将地址 from 中的 value 数量的积分转入地址 to ( to如果是合约地址,必须实现接收接口 BAC001Holder 才可以接收转账) ,并触发 transfer 事件,data 是转账备注
- suspend 状态下无法执行此操作
safeBatchSend( address[] to, uint256[] values, string data)
批量将自己账户下的积分转给 to 数组的地址, to 和 values 的个数要一致
- suspend 状态下无法执行此操作
approve(address spender,uint256 value)
允许 spender 从自己账户提取限额 value 的积分
- 此方法配合 sendfrom / safesendfrom 一起使用
- 重复授权时,最终授权额度为最后一次授权的值
allowance(address owner,address spender)
返回 spender 可从 owner 提取的积分数量上限
- 此方法配合 approve 一起使用
increaseAllowance(address spender, uint256 addedValue)
允许 spender 提取的积分上限在原有基础上增加 addedValue
- 此方法配合 approve 使用
decreaseAllowance(address spender, uint256 subtractedValue)
允许 spender 提取的积分上限在原有基础上减少 subtractedValue
- 此方法配合 approve 使用
minUnit()
积分最小单位
shortName()
积分简称
description()
积分描述
destory(uint256 value, string data)
减少自己的积分,data 是转账备注
- 调用时,value 值需要小于等于目前自己的积分总量
destroyFrom(address from, uint256 value, string data)
减少地址 from 积分,data 是转账备注
- 调用此方法时,需要配合 approve 进行使用
issue(address to, uint256 value,string data)
给地址 to 增加数量为 value 的积分,data 是转账备注
isIssuer(address account)
检查 account 是否有增加积分的权限
addIssuer(address account)
使地址 account 拥有增加积分的权限
renounceIssuer()
移除增加积分的权限
suspend()
暂停合约
- suspend 后无法进行 send / safesendfrom / sendfrom / safeBatchSend / approves 操作
unSuspend()
重启合约
suspended
判断合约是否处于暂停状态
isSuspender(address account)
是否有暂停合约权限
- 配合 suspend 方法一起使用
addSuspender(address account)
增加暂停权限者
- 配合 suspend 方法一起使用
renounceSuspender()
移除暂停权限
- 配合 suspend / addSuspender 方法使用