Java语言版本的SDK使用说明¶
为了便于使用,我们提供了Java版本的SDK。相关的使用说明可参考下文。
同时,提供了一个基于本SDK的Governance-Account-Demo。Demo中包含了相关的合约代码和SDK的代码,供参考。
引入工程¶
将Jar包引入到用户自己的Java业务项目中。
在自己的Java项目中的build.gradle文件中,添加maven仓库
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
引入依赖:
dependencies {
implementation 'com.github.WeBankBlockchain:Governance-Account:Tag'
}
治理账户功能使用说明¶
创建治理合约¶
管理员模式¶
假如平台方采用管理员的治理模式,那么需要首先生成一个管理员的治理账户。
具体调用示例:
// 自动注入AdminModeGovernAccountInitializer对象
@Autowired
private GovernAccountInitializer governAccountInitializer;
// 调用 createGovernAccount 方法生成管理员账户
WEGovernance govern = adminModeManager.createGovernAccount(u);
函数签名:
WEGovernance createGovernAccount(Credentials credential)
输入参数:
- credential 管理员的私钥
返回参数:
- WEGovernance 返回的治理账户对象
调用成功后,函数会返回对应的WEGovernance治理账户对象,通过getContractAddress()方法可以获得对应的治理合约的地址。
多签制治理模式¶
例如,以下平台方选择了治理委员会的治理模式,一共有三个参与者参与治理,治理的规则为任意的交易请求获得其中两方的同意,即可获得通过。那么我们接下来将创建一个治理账户。
具体调用示例:
// 自动注入GovernAccountInitializer对象
@Autowired
private GovernAccountInitializer governAccountInitializer;
// 准备3个治理账户管理成员的公钥地址,生成治理账户
List<String> list = new ArrayList<>();
list.add(address1);
list.add(address2);
list.add(address3);
// 创建账户
WEGovernance govern = adminModeManager.createGovernAccount(list, 2);
函数签名:
WEGovernance createGovernAccount(List<Credentials> credentials, int threshold)
输入参数:
- externalAccountList 治理委员会成员的外部账户信息。
- threshold 投票阈值,如超过该投票阈值,表示投票通过。
返回参数:
- WEGovernance 返回的治理账户对象
调用成功后,函数会返回对应的WEGovernance治理账户对象,通过getContractAddress()方法可以获得对应的治理合约的地址。
权重投票治理模式¶
本模式类似于上一种多签制,区别在于每个投票者的投票权重可以是不相同的。
例如,以下平台方选择了治理委员会的权重投票的治理模式,一共有三个参与者参与治理,投票的权重分别为1、2、3,阈值为4,也就是说任意的赞同选票权重相加超过阈值即可获得通过。那么我们接下来将创建一个治理账户。
具体调用示例:
// 自动注入GovernAccountInitializer对象
@Autowired
private GovernAccountInitializer governAccountInitializer;
// 准备3个治理账户管理成员的公钥地址,生成治理账户
List<String> list = new ArrayList<>();
list.add(address1);
list.add(address2);
list.add(address3);
// 设置3个投票账户的权重分别为1、2、3
List<BigInteger> weights = new ArrayList<>();
weights.add(BigInteger.valueOf(1));
weights.add(BigInteger.valueOf(2));
weights.add(BigInteger.valueOf(3));
// 创建账户
WEGovernance govern = adminModeManager.createGovernAccount(list, weights, 4);
函数签名:
WEGovernance createGovernAccount(List<String> credentialsList, List<BigInteger> weights, int threshold)
输入参数:
- externalAccountList 治理委员会成员的外部账户信息。
- weights 治理委员会成员对应的投票权重。
- threshold 投票阈值,如超过该投票阈值,表示投票通过。
返回参数:
- WEGovernance 返回的治理账户对象
调用成功后,函数会返回对应的WEGovernance治理账户对象,通过getContractAddress()方法可以获得对应的治理合约的地址。
调用控制接口¶
管理员模式¶
管理员模式下的管理功能均位于GovernAccountInitializer类中。
首先,注入该类:
@Autowired
private AdminModeGovernManager adminModeManager;
重置用户私钥¶
具体调用示例:
TransactionReceipt tr = adminModeManager.resetAccount(u1Address, u2Address);
函数签名:
TransactionReceipt resetAccount(String oldAccount, String newAccount)
输入参数:
- oldAccount 用户的外部账户的原私钥地址。
- newAccount 该账户被重置后的私钥地址。
返回参数:
- TransactionReceipt 交易回执
冻结普通账户¶
具体调用示例:
TransactionReceipt tr = adminModeManager.freezeAccount(u1Address);
函数签名:
TransactionReceipt freezeAccount(String account)
输入参数:
- account 用户的外部账户的私钥地址。
返回参数:
- TransactionReceipt 交易回执
解冻普通账户¶
具体调用示例:
TransactionReceipt tr = adminModeManager.unfreezeAccount(u1Address);
函数签名:
TransactionReceipt unfreezeAccount(String account)
输入参数:
- account 用户的外部账户的私钥地址。
返回参数:
- TransactionReceipt 交易回执
账户强制注销¶
具体调用示例:
TransactionReceipt tr = governAccountInitializer.cancelAccount(u1Address);
函数签名:
TransactionReceipt cancelAccount(String account)
输入参数:
- account 用户的外部账户的私钥地址。
返回参数:
- TransactionReceipt 交易回执
移交管理员的权限¶
移交管理员账户时,需要确保被移交的账户已注册,且账户状态正常。
具体调用示例:
TransactionReceipt tr = adminModeManager.transferAdminAuth(u1Address);
函数签名:
TransactionReceipt transferAdminAuth(String account)
输入参数:
- account 用户的外部账户的私钥地址。
返回参数:
- TransactionReceipt 交易回执
多签制治理模式¶
治理委员会模式下的管理功能均位于 VoteModeGovernManager 类中。
首先,注入该类:
@Autowired
private VoteModeGovernManager voteModeGovernManager;
在本模式下,执行任何账户相关的业务操作需要遵循以下步骤:
- 发起一个投票请求;
- 治理账户成员赞同该投票;
- 投票发起者确认投票已经通过后,发起操作。
我们首先来介绍下通用的投票接口:
治理委员会成员投票¶
具体调用示例:
TransactionReceipt tr = voteModeGovernManager.vote(requestId, true);
函数签名:
TransactionReceipt vote(BigInteger requestId, boolean agreed)
输入参数:
- requestId 发起投票的requestId。
- agreed 是否同意,true/false
返回参数:
- TransactionReceipt 交易回执
重置用户私钥¶
参考上文提及的三个步骤:发起投票请求、投票、执行操作。此处,使用了单SDK来处理多用户的操作,使用了changeCredentials函数来切换不同的用户。
具体调用示例:
// 发起投票请求
BigInteger requestId = voteModeGovernManager.requestResetAccount(p2.getAddress(), p1.getAddress());
// 执行投票
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u1);
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u);
// 发起重置私钥操作
TransactionReceipt tr = voteModeGovernManager.resetAccount(requestId, p2.getAddress(), p1.getAddress());
发起重置用户私钥投票申请¶
函数签名:
BigInteger requestResetAccount(String newCredential, String oldCredential)
输入参数:
- oldCredential 用户的外部账户的原私钥地址。
- newCredential 该账户被重置后的私钥地址
返回参数:
- BigInteger 投票ID,用户需保存该ID便于后续的交互和其他操作。
重置用户私钥¶
函数签名:
TransactionReceipt resetAccount(BigInteger requestId, String newCredential, String oldCredential)
输入参数:
- requestId 之前的投票请求返回的ID
- newCredential 该账户被重置后的私钥地址
- oldCredential 用户的外部账户的原私钥地址。
返回参数:
- TransactionReceipt 交易回执。
冻结普通账户¶
参考上文提及的三个步骤:发起投票请求、投票、执行操作。此处,使用了单SDK来处理多用户的操作,使用了changeCredentials函数来切换不同的用户。
具体调用示例:
// 发起投票请求
BigInteger requestId = voteModeGovernManager.requestFreezeAccount(p2.getAddress());
// 执行投票
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u1);
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u);
// 发起重置私钥操作
TransactionReceipt tr = voteModeGovernManager.freezeAccount(requestId, p2.getAddress());
发起冻结用户账户投票申请¶
函数签名:
BigInteger requestFreezeAccount(String credential)
输入参数:
- externalAccount 用户的外部账户地址。
返回参数:
- BigInteger 投票ID,用户需保存该ID便于后续的交互和其他操作。
冻结用户账户¶
函数签名:
TransactionReceipt freezeAccount(BigInteger requestId, String credential)
输入参数:
- requestId 之前的投票请求返回的ID
- externalAccount 用户的外部账户地址。
返回参数:
- TransactionReceipt 交易回执。
解冻普通账户¶
参考上文提及的三个步骤:发起投票请求、投票、执行操作。此处,使用了单SDK来处理多用户的操作,使用了changeCredentials函数来切换不同的用户。
具体调用示例:
// 发起投票请求
BigInteger requestId = voteModeGovernManager.requestUnreezeAccount(p2.getAddress());
// 执行投票
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u1);
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u);
// 发起重置私钥操作
TransactionReceipt tr = voteModeGovernManager.unfreezeAccount(requestId, p2.getAddress());
发起解冻用户账户投票申请¶
函数签名:
BigInteger requestunfreezeAccount(String credential)
输入参数:
- externalAccount 用户的外部账户地址。
返回参数:
- BigInteger 投票ID,用户需保存该ID便于后续的交互和其他操作。
解冻用户账户¶
函数签名:
TransactionReceipt unfreezeAccount(BigInteger requestId, String credential)
输入参数:
- requestId 之前的投票请求返回的ID
- externalAccount 用户的外部账户地址。
返回参数:
- TransactionReceipt 交易回执。
账户强制注销¶
参考上文提及的三个步骤:发起投票请求、投票、执行操作。此处,使用了单SDK来处理多用户的操作,使用了changeCredentials函数来切换不同的用户。
具体调用示例:
// 发起投票请求
BigInteger requestId = voteModeGovernManager.requestCancelAccount(p2.getAddress());
// 执行投票
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u1);
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u);
// 发起重置私钥操作
TransactionReceipt tr = voteModeGovernManager.cancelAccount(requestId, p2.getAddress());
发起注销用户账户投票申请¶
函数签名:
BigInteger requestCancelAccount(String credential)
输入参数:
- externalAccount 用户的外部账户地址。
返回参数:
- BigInteger 投票ID,用户需保存该ID便于后续的交互和其他操作。
注销用户账户¶
函数签名:
TransactionReceipt cancelAccount(BigInteger requestId, String credential)
输入参数:
- requestId 之前的投票请求返回的ID
- externalAccount 用户的外部账户地址。
返回参数:
- TransactionReceipt 交易回执。
设置治理账户投票的阈值¶
参考上文提及的三个步骤:发起投票请求、投票、执行操作。此处,使用了单SDK来处理多用户的操作,使用了changeCredentials函数来切换不同的用户。
具体调用示例:
// 发起投票请求
BigInteger requestId = voteModeGovernManager.requestResetThreshold(newThreshold);
// 执行投票
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u1);
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u);
// 发起重置私钥操作
TransactionReceipt tr = voteModeGovernManager.resetThreshold(requestId, newThreshold);
发起设置治理账户投票申请¶
函数签名:
BigInteger requestRemoveGovernAccount(int newThreshold)
输入参数:
- newThreshold 新阈值。
返回参数:
- BigInteger 投票ID,用户需保存该ID便于后续的交互和其他操作。
设置新阈值¶
函数签名:
TransactionReceipt resetThreshold(BigInteger requestId, int threshold)
输入参数:
- requestId 之前的投票请求返回的ID
- newThreshold 新阈值。
返回参数:
- TransactionReceipt 交易回执。
治理账户删除一个投票账户¶
参考上文提及的三个步骤:发起投票请求、投票、执行操作。此处,使用了单SDK来处理多用户的操作,使用了changeCredentials函数来切换不同的用户。
具体调用示例:
// 发起投票请求
BigInteger requestId = voteModeGovernManager.requestRemoveGovernAccount(p2.getAddress());
// 执行投票
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u1);
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u);
// 发起重置私钥操作
TransactionReceipt tr = voteModeGovernManager.removeGovernAccount(requestId, p2.getAddress());
发起删除一个治理账户投票申请¶
函数签名:
BigInteger requestRemoveGovernAccount(String credential)
输入参数:
- externalAccount 用户的外部账户地址。
返回参数:
- BigInteger 投票ID,用户需保存该ID便于后续的交互和其他操作。
删除一个投票账户¶
函数签名:
TransactionReceipt removeGovernAccount(BigInteger requestId, String credential)
输入参数:
- requestId 之前的投票请求返回的ID
- externalAccount 用户的外部账户地址。
返回参数:
- TransactionReceipt 交易回执。
治理账户添加一个投票新账户¶
参考上文提及的三个步骤:发起投票请求、投票、执行操作。此处,使用了单SDK来处理多用户的操作,使用了changeCredentials函数来切换不同的用户。
具体调用示例:
// 发起投票请求
BigInteger requestId = voteModeGovernManager.requestAddGovernAccount(p2.getAddress());
// 执行投票
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u1);
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u);
// 发起重置私钥操作
TransactionReceipt tr = voteModeGovernManager.addGovernAccount(requestId, p2.getAddress());
发起添加一个治理账户投票申请¶
函数签名:
BigInteger requestAddGovernAccount(String credential)
输入参数:
- externalAccount 用户的外部账户地址。
返回参数:
- BigInteger 投票ID,用户需保存该ID便于后续的交互和其他操作。
添加一个投票账户¶
函数签名:
TransactionReceipt addGovernAccount(BigInteger requestId, String credential)
输入参数:
- requestId 之前的投票请求返回的ID
- externalAccount 用户的外部账户地址。
返回参数:
- TransactionReceipt 交易回执。
不同权重的投票制治理模式¶
不同权重的投票制模式总体和多签制非常类似,此处不再做过多的赘述,请参考上节。
治理账户添加一个投票新账户¶
参考上文提及的三个步骤:发起投票请求、投票、执行操作。此处,使用了单SDK来处理多用户的操作,使用了changeCredentials函数来切换不同的用户。
具体调用示例:
// 发起投票请求
BigInteger requestId = voteModeGovernManager.requestAddGovernAccount(p2.getAddress() , weight);
// 执行投票
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u1);
voteModeGovernManager.vote(requestId, true);
// 切换投票者
voteModeGovernManager.changeCredentials(u);
// 发起重置私钥操作
TransactionReceipt tr = voteModeGovernManager.addGovernAccount(requestId, p2.getAddress(), weight);
发起添加一个治理账户投票申请¶
函数签名:
BigInteger requestAddGovernAccount(String credential, int weight)
输入参数:
- externalAccount 用户的外部账户地址。
- weight 新加入账户的权重
返回参数:
- BigInteger 投票ID,用户需保存该ID便于后续的交互和其他操作。
添加一个投票账户¶
函数签名:
TransactionReceipt addGovernAccount(BigInteger requestId, String credential, int weight)
输入参数:
- requestId 之前的投票请求返回的ID
- externalAccount 用户的外部账户地址。
- weight 新加入账户的权重
返回参数:
- TransactionReceipt 交易回执。
其他交易¶
其余部分颇为相似,可参考基于相同权重的投票模式
普通用户接口¶
普通账户主要功能¶
普通账户的功能均位于EndUserOperManager类中。
首先,注入该类:
@Autowired
private EndUserOperManager endUserOperManager;
创建新账户¶
具体调用示例:
String account = endUserAdminManager.createAccount(p1Address);
函数签名:
String createAccount(String who)
输入参数:
- externalAccount 待创建的账户的外部账户的私钥地址。
返回参数:
- String 新建的账户地址
重置用户私钥¶
具体调用示例:
TransactionReceipt tr = endUserAdminManager.resetAccount(p2Address);
函数签名:
TransactionReceipt resetAccount(String newCredential)
输入参数:
- newCredential 待更换的私钥地址。
返回参数:
- TransactionReceipt 交易回执
账户强制注销¶
具体调用示例:
TransactionReceipt tr = endUserAdminManager.cancelAccount();
函数签名:
TransactionReceipt cancelAccount()
返回参数:
- TransactionReceipt 交易回执
修改普通账户的管理类型¶
具体调用示例:
List<String> voters = Lists.newArrayList();
voters.add(u.getAddress());
voters.add(u1.getAddress());
voters.add(u2.getAddress());
TransactionReceipt tr = endUserAdminManager.modifyManagerType(voters);
函数签名:
TransactionReceipt modifyManagerType(List<String> voters)
//重载函数,设置为仅自己管理
TransactionReceipt modifyManagerType()
输入参数:
- voters (可选) 当变更为支持社交好友投票时需要传入,且voters的大小必须为3。投票本身为2-3的规则。如果voters不传入,则默认不开启投票模式。
返回参数:
- TransactionReceipt 交易回执
添加一个社交好友¶
具体调用示例:
TransactionReceipt tr = endUserAdminManager.addRelatedAccount(userAddress);
函数签名:
TransactionReceipt addRelatedAccount(String account)
输入参数:
- account 被添加好友的外部账户地址。
返回参数:
- TransactionReceipt 交易回执
删除一个社交好友¶
具体调用示例:
TransactionReceipt tr = endUserAdminManager.removeRelatedAccount(userAddress);
函数签名:
TransactionReceipt removeRelatedAccount(String account)
输入参数:
- account 被删除好友的外部账户地址。
返回参数:
- TransactionReceipt 交易回执
使用社交好友投票重置私钥¶
重置用户私钥¶
参考上文提及的三个步骤:发起投票请求、投票、执行操作。此处,使用了单SDK来处理多用户的操作,使用了changeCredentials函数来切换不同的用户。
社交好友投票相关的操作在 SocialVoteManager 类中。
具体调用示例:
// 发起投票请求
TransactionReceipt t = socialVoteManager.requestResetAccount(u1.getAddress(), p1.getAddress());
// 执行投票
socialVoteManager.vote(requestId, true);
// 切换投票者
socialVoteManager.changeCredentials(u1);
socialVoteManager.vote(requestId, true);
// 切换投票者
socialVoteManager.changeCredentials(u);
// 发起重置私钥操作
TransactionReceipt tr = socialVoteManager.resetAccount(u1.getAddress(), p1.getAddress());
发起重置用户私钥投票申请¶
函数签名:
TransactionReceipt requestResetAccount(String newCredential, String oldCredential)
输入参数:
- oldCredential 用户的外部账户的原私钥地址。
- newCredential 该账户被重置后的私钥地址
返回参数:
- TransactionReceipt 交易回执。
投票¶
函数签名:
TransactionReceipt vote(String oldCredential, boolean agreed)
输入参数:
- oldCredential 申请变更账户的外部账户地址。
- agreed 是否同意
返回参数:
- TransactionReceipt 交易回执。
重置用户私钥¶
函数签名:
TransactionReceipt resetAccount(String newCredential, String oldCredential)
输入参数:
- newCredential 该账户被重置后的私钥地址
- oldCredential 用户的外部账户的原私钥地址。
返回参数:
- TransactionReceipt 交易回执。