|
| 1 | +package org.fisco.bcos.sdk.auth.contracts; |
| 2 | + |
| 3 | +import java.util.Arrays; |
| 4 | +import org.fisco.bcos.sdk.client.Client; |
| 5 | +import org.fisco.bcos.sdk.codec.datatypes.Bool; |
| 6 | +import org.fisco.bcos.sdk.codec.datatypes.Function; |
| 7 | +import org.fisco.bcos.sdk.codec.datatypes.Type; |
| 8 | +import org.fisco.bcos.sdk.codec.datatypes.TypeReference; |
| 9 | +import org.fisco.bcos.sdk.contract.Contract; |
| 10 | +import org.fisco.bcos.sdk.crypto.CryptoSuite; |
| 11 | +import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair; |
| 12 | +import org.fisco.bcos.sdk.model.CryptoType; |
| 13 | +import org.fisco.bcos.sdk.transaction.model.exception.ContractException; |
| 14 | + |
| 15 | +@SuppressWarnings("unchecked") |
| 16 | +public class ContractInterceptor extends Contract { |
| 17 | + public static final String[] BINARY_ARRAY = { |
| 18 | + "608060405234801561001057600080fd5b5061045a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806352d48562146100465780636bedbe88146100eb5780639ed9331814610190575b600080fd5b6100d16004803603606081101561005c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101ec565b604051808215151515815260200191505060405180910390f35b6101766004803603606081101561010157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610202565b604051808215151515815260200191505060405180910390f35b6101d2600480360360208110156101a657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610218565b604051808215151515815260200191505060405180910390f35b60006101f98484846102e0565b90509392505050565b600061020f8484846102e0565b90509392505050565b60008061100590508073ffffffffffffffffffffffffffffffffffffffff1663630577e5846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561029d57600080fd5b505afa1580156102b1573d6000803e3d6000fd5b505050506040513d60208110156102c757600080fd5b8101908080519060200190929190505050915050919050565b60008061100590508073ffffffffffffffffffffffffffffffffffffffff1663d8662aa48686866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b1580156103df57600080fd5b505afa1580156103f3573d6000803e3d6000fd5b505050506040513d602081101561040957600080fd5b8101908080519060200190929190505050915050939250505056fea26469706673582212204bc4858487aef75f434b59f43af97ee8d6cc6c870deeaf8f0720e69be9c79a1064736f6c634300060a0033" |
| 19 | + }; |
| 20 | + |
| 21 | + public static final String BINARY = |
| 22 | + org.fisco.bcos.sdk.utils.StringUtils.joinAll("", BINARY_ARRAY); |
| 23 | + |
| 24 | + public static final String[] SM_BINARY_ARRAY = { |
| 25 | + "608060405234801561001057600080fd5b5061045a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806324f8d036146100465780634ba0a39d146100eb5780636ebc0c5014610190575b600080fd5b6100d16004803603606081101561005c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101ec565b604051808215151515815260200191505060405180910390f35b6101766004803603606081101561010157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610202565b604051808215151515815260200191505060405180910390f35b6101d2600480360360208110156101a657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610218565b604051808215151515815260200191505060405180910390f35b60006101f98484846102e0565b90509392505050565b600061020f8484846102e0565b90509392505050565b60008061100590508073ffffffffffffffffffffffffffffffffffffffff1663c59065fb846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561029d57600080fd5b505afa1580156102b1573d6000803e3d6000fd5b505050506040513d60208110156102c757600080fd5b8101908080519060200190929190505050915050919050565b60008061100590508073ffffffffffffffffffffffffffffffffffffffff1663d3f8058c8686866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b1580156103df57600080fd5b505afa1580156103f3573d6000803e3d6000fd5b505050506040513d602081101561040957600080fd5b8101908080519060200190929190505050915050939250505056fea26469706673582212204ce95a88c9b830bdb3c6f99bd4fb1a848749c1423864a57412074580c8edad5064736f6c634300060a0033" |
| 26 | + }; |
| 27 | + |
| 28 | + public static final String SM_BINARY = |
| 29 | + org.fisco.bcos.sdk.utils.StringUtils.joinAll("", SM_BINARY_ARRAY); |
| 30 | + |
| 31 | + public static final String[] ABI_ARRAY = { |
| 32 | + "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddr\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"methodId\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"call\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddr\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"methodId\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"sendTransaction\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" |
| 33 | + }; |
| 34 | + |
| 35 | + public static final String ABI = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", ABI_ARRAY); |
| 36 | + |
| 37 | + public static final String FUNC_CALL = "call"; |
| 38 | + |
| 39 | + public static final String FUNC_CREATE = "create"; |
| 40 | + |
| 41 | + public static final String FUNC_SENDTRANSACTION = "sendTransaction"; |
| 42 | + |
| 43 | + protected ContractInterceptor(String contractAddress, Client client, CryptoKeyPair credential) { |
| 44 | + super(getBinary(client.getCryptoSuite()), contractAddress, client, credential); |
| 45 | + } |
| 46 | + |
| 47 | + public static String getBinary(CryptoSuite cryptoSuite) { |
| 48 | + return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY); |
| 49 | + } |
| 50 | + |
| 51 | + public static String getABI() { |
| 52 | + return ABI; |
| 53 | + } |
| 54 | + |
| 55 | + public Boolean call(String contractAddr, byte[] methodId, String account) |
| 56 | + throws ContractException { |
| 57 | + final Function function = |
| 58 | + new Function( |
| 59 | + FUNC_CALL, |
| 60 | + Arrays.<Type>asList( |
| 61 | + new org.fisco.bcos.sdk.codec.datatypes.Address(contractAddr), |
| 62 | + new org.fisco.bcos.sdk.codec.datatypes.generated.Bytes4(methodId), |
| 63 | + new org.fisco.bcos.sdk.codec.datatypes.Address(account)), |
| 64 | + Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {})); |
| 65 | + return executeCallWithSingleValueReturn(function, Boolean.class); |
| 66 | + } |
| 67 | + |
| 68 | + public Boolean create(String account) throws ContractException { |
| 69 | + final Function function = |
| 70 | + new Function( |
| 71 | + FUNC_CREATE, |
| 72 | + Arrays.<Type>asList( |
| 73 | + new org.fisco.bcos.sdk.codec.datatypes.Address(account)), |
| 74 | + Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {})); |
| 75 | + return executeCallWithSingleValueReturn(function, Boolean.class); |
| 76 | + } |
| 77 | + |
| 78 | + public Boolean sendTransaction(String contractAddr, byte[] methodId, String account) |
| 79 | + throws ContractException { |
| 80 | + final Function function = |
| 81 | + new Function( |
| 82 | + FUNC_SENDTRANSACTION, |
| 83 | + Arrays.<Type>asList( |
| 84 | + new org.fisco.bcos.sdk.codec.datatypes.Address(contractAddr), |
| 85 | + new org.fisco.bcos.sdk.codec.datatypes.generated.Bytes4(methodId), |
| 86 | + new org.fisco.bcos.sdk.codec.datatypes.Address(account)), |
| 87 | + Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {})); |
| 88 | + return executeCallWithSingleValueReturn(function, Boolean.class); |
| 89 | + } |
| 90 | + |
| 91 | + public static ContractInterceptor load( |
| 92 | + String contractAddress, Client client, CryptoKeyPair credential) { |
| 93 | + return new ContractInterceptor(contractAddress, client, credential); |
| 94 | + } |
| 95 | + |
| 96 | + public static ContractInterceptor deploy(Client client, CryptoKeyPair credential) |
| 97 | + throws ContractException { |
| 98 | + return deploy( |
| 99 | + ContractInterceptor.class, |
| 100 | + client, |
| 101 | + credential, |
| 102 | + getBinary(client.getCryptoSuite()), |
| 103 | + null, |
| 104 | + null, |
| 105 | + null); |
| 106 | + } |
| 107 | +} |
0 commit comments