Skip to content

Commit a6028df

Browse files
authored
<feat>(precompiled): adapt initAuth method. (#725)
1 parent 646737b commit a6028df

File tree

4 files changed

+95
-18
lines changed

4 files changed

+95
-18
lines changed

src/main/java/org/fisco/bcos/sdk/v3/contract/auth/contracts/ContractAuthPrecompiled.java

Lines changed: 66 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
@SuppressWarnings("unchecked")
3030
public class ContractAuthPrecompiled extends Contract {
3131
public static final String[] ABI_ARRAY = {
32-
"[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddr\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"func\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"checkMethodAuth\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"selector\":[3630574244,3556246924],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"closeDeployAuth\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"selector\":[1455255684,438325841],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddr\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"func\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"closeMethodAuth\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"selector\":[3413924881,2232681703],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"contractAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"selector\":[747391567,2445967236],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deployType\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"selector\":[390708905,1502262678],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddr\",\"type\":\"address\"}],\"name\":\"getAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"selector\":[1693430315,3050872],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"path\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"func\",\"type\":\"bytes4\"}],\"name\":\"getMethodAuth\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"selector\":[91771290,3467007364],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasDeployAuth\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"selector\":[1661302757,3314574843],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"openDeployAuth\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"selector\":[1632927897,40510205],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"path\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"func\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"openMethodAuth\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"selector\":[209893181,4148123484],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"path\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"resetAdmin\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"selector\":[3308279732,45314107],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isFreeze\",\"type\":\"bool\"}],\"name\":\"setContractStatus\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"selector\":[2177375452,2437471713],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"enum Status\",\"name\":\"_status\",\"type\":\"uint8\"}],\"name\":\"setContractStatus\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"selector\":[4135554508,610209536],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_type\",\"type\":\"uint8\"}],\"name\":\"setDeployAuthType\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"selector\":[3138036748,2966063259],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"path\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"func\",\"type\":\"bytes4\"},{\"internalType\":\"uint8\",\"name\":\"authType\",\"type\":\"uint8\"}],\"name\":\"setMethodAuthType\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"selector\":[2630076943,1025843675],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
32+
"[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddr\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"func\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"checkMethodAuth\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"closeDeployAuth\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddr\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"func\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"closeMethodAuth\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"address\",\"type\":\"address\"}],\"name\":\"contractAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deployType\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddr\",\"type\":\"address\"}],\"name\":\"getAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddr\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"func\",\"type\":\"bytes4\"}],\"name\":\"getMethodAuth\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasDeployAuth\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"account\",\"type\":\"string\"}],\"name\":\"initAuth\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"openDeployAuth\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddr\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"func\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"openMethodAuth\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"resetAdmin\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"address\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isFreeze\",\"type\":\"bool\"}],\"name\":\"setContractStatus\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"address\",\"type\":\"address\"},{\"internalType\":\"enum Status\",\"name\":\"_status\",\"type\":\"uint8\"}],\"name\":\"setContractStatus\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_type\",\"type\":\"uint8\"}],\"name\":\"setDeployAuthType\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddr\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"func\",\"type\":\"bytes4\"},{\"internalType\":\"uint8\",\"name\":\"authType\",\"type\":\"uint8\"}],\"name\":\"setMethodAuthType\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
3333
};
3434

3535
public static final String ABI = StringUtils.joinAll("", ABI_ARRAY);
@@ -50,6 +50,8 @@ public class ContractAuthPrecompiled extends Contract {
5050

5151
public static final String FUNC_HASDEPLOYAUTH = "hasDeployAuth";
5252

53+
public static final String FUNC_INITAUTH = "initAuth";
54+
5355
public static final String FUNC_OPENDEPLOYAUTH = "openDeployAuth";
5456

5557
public static final String FUNC_OPENMETHODAUTH = "openMethodAuth";
@@ -223,12 +225,12 @@ public String getAdmin(String contractAddr) throws ContractException {
223225
return executeCallWithSingleValueReturn(function, String.class);
224226
}
225227

226-
public Tuple3<BigInteger, List<String>, List<String>> getMethodAuth(String path, byte[] func)
227-
throws ContractException {
228+
public Tuple3<BigInteger, List<String>, List<String>> getMethodAuth(
229+
String contractAddr, byte[] func) throws ContractException {
228230
final Function function =
229231
new Function(
230232
FUNC_GETMETHODAUTH,
231-
Arrays.<Type>asList(new Address(path), new Bytes4(func)),
233+
Arrays.<Type>asList(new Address(contractAddr), new Bytes4(func)),
232234
Arrays.<TypeReference<?>>asList(
233235
new TypeReference<Uint8>() {},
234236
new TypeReference<DynamicArray<Utf8String>>() {},
@@ -249,6 +251,57 @@ public Boolean hasDeployAuth(String account) throws ContractException {
249251
return executeCallWithSingleValueReturn(function, Boolean.class);
250252
}
251253

254+
public TransactionReceipt initAuth(String account) {
255+
final Function function =
256+
new Function(
257+
FUNC_INITAUTH,
258+
Arrays.<Type>asList(new Utf8String(account)),
259+
Collections.<TypeReference<?>>emptyList());
260+
return executeTransaction(function);
261+
}
262+
263+
public String initAuth(String account, TransactionCallback callback) {
264+
final Function function =
265+
new Function(
266+
FUNC_INITAUTH,
267+
Arrays.<Type>asList(new Utf8String(account)),
268+
Collections.<TypeReference<?>>emptyList());
269+
return asyncExecuteTransaction(function, callback);
270+
}
271+
272+
public String getSignedTransactionForInitAuth(String account) {
273+
final Function function =
274+
new Function(
275+
FUNC_INITAUTH,
276+
Arrays.<Type>asList(new Utf8String(account)),
277+
Collections.<TypeReference<?>>emptyList());
278+
return createSignedTransaction(function);
279+
}
280+
281+
public Tuple1<String> getInitAuthInput(TransactionReceipt transactionReceipt) {
282+
String data = transactionReceipt.getInput().substring(10);
283+
final Function function =
284+
new Function(
285+
FUNC_INITAUTH,
286+
Arrays.<Type>asList(),
287+
Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
288+
List<Type> results =
289+
this.functionReturnDecoder.decode(data, function.getOutputParameters());
290+
return new Tuple1<String>((String) results.get(0).getValue());
291+
}
292+
293+
public Tuple1<BigInteger> getInitAuthOutput(TransactionReceipt transactionReceipt) {
294+
String data = transactionReceipt.getOutput();
295+
final Function function =
296+
new Function(
297+
FUNC_INITAUTH,
298+
Arrays.<Type>asList(),
299+
Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
300+
List<Type> results =
301+
this.functionReturnDecoder.decode(data, function.getOutputParameters());
302+
return new Tuple1<BigInteger>((BigInteger) results.get(0).getValue());
303+
}
304+
252305
public TransactionReceipt openDeployAuth(String account) {
253306
final Function function =
254307
new Function(
@@ -472,34 +525,31 @@ public Tuple1<BigInteger> getSetContractStatusAddressBoolOutput(
472525
return new Tuple1<BigInteger>((BigInteger) results.get(0).getValue());
473526
}
474527

475-
public TransactionReceipt setContractStatus(String _address, BigInteger _status) {
528+
public TransactionReceipt setContractStatus(String address, BigInteger _status) {
476529
final Function function =
477530
new Function(
478531
FUNC_SETCONTRACTSTATUS,
479-
Arrays.<Type>asList(new Address(_address), new Uint8(_status)),
480-
Collections.<TypeReference<?>>emptyList(),
481-
0);
532+
Arrays.<Type>asList(new Address(address), new Uint8(_status)),
533+
Collections.<TypeReference<?>>emptyList());
482534
return executeTransaction(function);
483535
}
484536

485537
public String setContractStatus(
486-
String _address, BigInteger _status, TransactionCallback callback) {
538+
String address, BigInteger _status, TransactionCallback callback) {
487539
final Function function =
488540
new Function(
489541
FUNC_SETCONTRACTSTATUS,
490-
Arrays.<Type>asList(new Address(_address), new Uint8(_status)),
491-
Collections.<TypeReference<?>>emptyList(),
492-
0);
542+
Arrays.<Type>asList(new Address(address), new Uint8(_status)),
543+
Collections.<TypeReference<?>>emptyList());
493544
return asyncExecuteTransaction(function, callback);
494545
}
495546

496-
public String getSignedTransactionForSetContractStatus(String _address, BigInteger _status) {
547+
public String getSignedTransactionForSetContractStatus(String address, BigInteger _status) {
497548
final Function function =
498549
new Function(
499550
FUNC_SETCONTRACTSTATUS,
500-
Arrays.<Type>asList(new Address(_address), new Uint8(_status)),
501-
Collections.<TypeReference<?>>emptyList(),
502-
0);
551+
Arrays.<Type>asList(new Address(address), new Uint8(_status)),
552+
Collections.<TypeReference<?>>emptyList());
503553
return createSignedTransaction(function);
504554
}
505555

src/main/java/org/fisco/bcos/sdk/v3/contract/auth/manager/AuthManager.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,31 @@ public BigInteger proposalCount() throws ContractException {
741741
return committeeManager.getProposalManager()._proposalCount();
742742
}
743743

744+
/**
745+
* init committee system for old version chain which not open auth check NOTE: this method only
746+
* can be used when chain version >= 3.3.0
747+
*
748+
* @param admin committee first admin
749+
* @return return code
750+
* @throws ContractException throw when check failed or contract exec exception
751+
*/
752+
public RetCode initAuth(String admin) throws ContractException {
753+
long compatibilityVersion =
754+
client.getGroupInfo()
755+
.getResult()
756+
.getNodeList()
757+
.get(0)
758+
.getProtocol()
759+
.getCompatibilityVersion();
760+
PrecompiledVersionCheck.INIT_AUTH_VERSION.checkVersion(compatibilityVersion);
761+
TransactionReceipt receipt = contractAuthPrecompiled.initAuth(admin);
762+
if (receipt.getStatus() != TransactionReceiptStatus.Success.code) {
763+
ReceiptParser.getErrorStatus(receipt);
764+
}
765+
return ReceiptParser.parseTransactionReceipt(
766+
receipt, tr -> contractAuthPrecompiled.getInitAuthOutput(tr).getValue1());
767+
}
768+
744769
private boolean existsInNodeList(String nodeId) {
745770
List<String> nodeIdList = client.getGroupPeers().getGroupPeers();
746771
return nodeIdList.contains(nodeId);

src/main/java/org/fisco/bcos/sdk/v3/contract/precompiled/model/PrecompiledVersionCheck.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,6 @@ public class PrecompiledVersionCheck {
66
public static final Version SET_CONTRACT_STATUS_VERSION =
77
new Version("setContractStatus", "3.2.0");
88
public static final Version V320_CRUD_VERSION = new Version("v320CrudVersion", "3.2.0");
9+
10+
public static final Version INIT_AUTH_VERSION = new Version("initAuth", "3.3.0");
911
}

src/main/java/org/fisco/bcos/sdk/v3/contract/precompiled/sysconfig/SystemConfigService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@ public class SystemConfigService {
3131
public static final String TX_COUNT_LIMIT = "tx_count_limit";
3232
public static final String TX_GAS_LIMIT = "tx_gas_limit";
3333
public static final String CONSENSUS_PERIOD = "consensus_leader_period";
34-
public static final String AUTH_STATUS = "auth_status";
34+
public static final String AUTH_STATUS = "auth_check_status";
3535
public static final int TX_GAS_LIMIT_MIN = 100000;
3636
private static final Map<String, Predicate<BigInteger>> predicateMap = new HashMap<>();
3737

3838
static {
3939
predicateMap.put(TX_COUNT_LIMIT, value -> value.compareTo(BigInteger.ONE) >= 0);
4040
predicateMap.put(CONSENSUS_PERIOD, value -> value.compareTo(BigInteger.ONE) >= 0);
41-
predicateMap.put(AUTH_STATUS, value -> value.compareTo(BigInteger.ONE) >= 0);
41+
predicateMap.put(AUTH_STATUS, value -> value.compareTo(BigInteger.ZERO) >= 0);
4242
predicateMap.put(
4343
TX_GAS_LIMIT, value -> value.compareTo(BigInteger.valueOf(TX_GAS_LIMIT_MIN)) >= 0);
4444
}

0 commit comments

Comments
 (0)