积分合约模板

简介

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 方法使用