Skip to content

Commit 97a8fbb

Browse files
authored
Merge pull request #1 from tronprotocol/develop
keep pace
2 parents 507f63d + d9cb8b7 commit 97a8fbb

File tree

447 files changed

+14115
-4350
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

447 files changed

+14115
-4350
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,4 @@ If you'd like to contribute to java-tron, please follow below.
9696
* [White Paper](https://tron.network/resources?lng=&name=1) White paper of TRON network.
9797

9898
# License
99-
[MIT](https://github.com/tronprotocol/java-tron/blob/master/LICENSE)
99+
java-tron is released under the [LGPL-V3 license](https://github.com/tronprotocol/java-tron/blob/master/LICENSE).

actuator/src/main/java/org/tron/core/actuator/AccountPermissionUpdateActuator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,11 +146,11 @@ private boolean checkPermission(Permission permission) throws ContractValidateEx
146146
public boolean validate() throws ContractValidateException {
147147

148148
if (chainBaseManager == null) {
149-
throw new ContractValidateException("No account store or dynamic store!");
149+
throw new ContractValidateException(ActuatorConstant.STORE_NOT_EXIST);
150150
}
151151

152152
if (this.any == null) {
153-
throw new ContractValidateException("No contract!");
153+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
154154
}
155155

156156
AccountStore accountStore = chainBaseManager.getAccountStore();

actuator/src/main/java/org/tron/core/actuator/ActuatorConstant.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,7 @@ public class ActuatorConstant {
77
public static final String PROPOSAL_EXCEPTION_STR = "Proposal[";
88
public static final String NOT_EXIST_STR = "] not exists";
99
public static final String TX_RESULT_NULL = "TransactionResultCapsule is null";
10+
public static final String CONTRACT_NOT_EXIST = "No contract!";
11+
public static final String STORE_NOT_EXIST = "No account store or dynamic store!";
1012

1113
}

actuator/src/main/java/org/tron/core/actuator/AssetIssueActuator.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,10 @@ public boolean execute(Object result) throws ContractExeException {
132132
@Override
133133
public boolean validate() throws ContractValidateException {
134134
if (this.any == null) {
135-
throw new ContractValidateException("No contract!");
135+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
136136
}
137137
if (chainBaseManager == null) {
138-
throw new ContractValidateException("No account store or dynamic store!");
138+
throw new ContractValidateException(ActuatorConstant.STORE_NOT_EXIST);
139139
}
140140
DynamicPropertiesStore dynamicStore = chainBaseManager.getDynamicPropertiesStore();
141141
AssetIssueStore assetIssueStore = chainBaseManager.getAssetIssueStore();
@@ -171,10 +171,10 @@ public boolean validate() throws ContractValidateException {
171171
}
172172

173173
int precision = assetIssueContract.getPrecision();
174-
if (precision != 0 && dynamicStore.getAllowSameTokenName() != 0) {
175-
if (precision < 0 || precision > 6) {
176-
throw new ContractValidateException("precision cannot exceed 6");
177-
}
174+
if (precision != 0
175+
&& dynamicStore.getAllowSameTokenName() != 0
176+
&& (precision < 0 || precision > 6)) {
177+
throw new ContractValidateException("precision cannot exceed 6");
178178
}
179179

180180
if ((!assetIssueContract.getAbbr().isEmpty()) && !TransactionUtil
@@ -291,7 +291,4 @@ public long calcFee() {
291291
return chainBaseManager.getDynamicPropertiesStore().getAssetIssueFee();
292292
}
293293

294-
public long calcUsage() {
295-
return 0;
296-
}
297294
}

actuator/src/main/java/org/tron/core/actuator/ClearABIContractActuator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public boolean validate() throws ContractValidateException {
6262
}
6363

6464
if (this.any == null) {
65-
throw new ContractValidateException("No contract!");
65+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
6666
}
6767
if (chainBaseManager == null) {
6868
throw new ContractValidateException("No account store or contract store!");

actuator/src/main/java/org/tron/core/actuator/CreateAccountActuator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public boolean execute(Object result)
6464
@Override
6565
public boolean validate() throws ContractValidateException {
6666
if (this.any == null) {
67-
throw new ContractValidateException("No contract!");
67+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
6868
}
6969
if (chainBaseManager == null) {
7070
throw new ContractValidateException("No account store or contract store!");

actuator/src/main/java/org/tron/core/actuator/ExchangeCreateActuator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,10 @@ public boolean execute(Object object) throws ContractExeException {
133133
@Override
134134
public boolean validate() throws ContractValidateException {
135135
if (this.any == null) {
136-
throw new ContractValidateException("No contract!");
136+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
137137
}
138138
if (chainBaseManager == null) {
139-
throw new ContractValidateException("No account store or dynamicStore store!");
139+
throw new ContractValidateException(ActuatorConstant.STORE_NOT_EXIST);
140140
}
141141
AccountStore accountStore = chainBaseManager.getAccountStore();
142142
DynamicPropertiesStore dynamicStore = chainBaseManager.getDynamicPropertiesStore();

actuator/src/main/java/org/tron/core/actuator/ExchangeInjectActuator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,10 @@ public boolean execute(Object object) throws ContractExeException {
115115
@Override
116116
public boolean validate() throws ContractValidateException {
117117
if (this.any == null) {
118-
throw new ContractValidateException("No contract!");
118+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
119119
}
120120
if (chainBaseManager == null) {
121-
throw new ContractValidateException("No account store or dynamic store!");
121+
throw new ContractValidateException(ActuatorConstant.STORE_NOT_EXIST);
122122
}
123123
AccountStore accountStore = chainBaseManager.getAccountStore();
124124
DynamicPropertiesStore dynamicStore = chainBaseManager.getDynamicPropertiesStore();

actuator/src/main/java/org/tron/core/actuator/ExchangeTransactionActuator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,10 @@ public boolean execute(Object object) throws ContractExeException {
107107
@Override
108108
public boolean validate() throws ContractValidateException {
109109
if (this.any == null) {
110-
throw new ContractValidateException("No contract!");
110+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
111111
}
112112
if (chainBaseManager == null) {
113-
throw new ContractValidateException("No account store or dynamic store!");
113+
throw new ContractValidateException(ActuatorConstant.STORE_NOT_EXIST);
114114
}
115115
AccountStore accountStore = chainBaseManager.getAccountStore();
116116
DynamicPropertiesStore dynamicStore = chainBaseManager.getDynamicPropertiesStore();

actuator/src/main/java/org/tron/core/actuator/ExchangeWithdrawActuator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,10 @@ public boolean execute(Object object) throws ContractExeException {
125125
@Override
126126
public boolean validate() throws ContractValidateException {
127127
if (this.any == null) {
128-
throw new ContractValidateException("No contract!");
128+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
129129
}
130130
if (chainBaseManager == null) {
131-
throw new ContractValidateException("No account store or dynamic store!");
131+
throw new ContractValidateException(ActuatorConstant.STORE_NOT_EXIST);
132132
}
133133
AccountStore accountStore = chainBaseManager.getAccountStore();
134134
DynamicPropertiesStore dynamicStore = chainBaseManager.getDynamicPropertiesStore();

actuator/src/main/java/org/tron/core/actuator/FreezeBalanceActuator.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import lombok.extern.slf4j.Slf4j;
1212
import org.apache.commons.lang3.ArrayUtils;
1313
import org.tron.common.parameter.CommonParameter;
14-
import org.tron.common.utils.DBConfig;
1514
import org.tron.common.utils.DecodeUtil;
1615
import org.tron.common.utils.StringUtil;
1716
import org.tron.core.capsule.AccountCapsule;
@@ -115,10 +114,10 @@ public boolean execute(Object result) throws ContractExeException {
115114
@Override
116115
public boolean validate() throws ContractValidateException {
117116
if (this.any == null) {
118-
throw new ContractValidateException("No contract!");
117+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
119118
}
120119
if (chainBaseManager == null) {
121-
throw new ContractValidateException("No account store or dynamic store!");
120+
throw new ContractValidateException(ActuatorConstant.STORE_NOT_EXIST);
122121
}
123122
AccountStore accountStore = chainBaseManager.getAccountStore();
124123
DynamicPropertiesStore dynamicStore = chainBaseManager.getDynamicPropertiesStore();

actuator/src/main/java/org/tron/core/actuator/ParticipateAssetIssueActuator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,10 @@ public boolean execute(Object object) throws ContractExeException {
102102
@Override
103103
public boolean validate() throws ContractValidateException {
104104
if (this.any == null) {
105-
throw new ContractValidateException("No contract!");
105+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
106106
}
107107
if (chainBaseManager == null) {
108-
throw new ContractValidateException("No account store or dynamic store!");
108+
throw new ContractValidateException(ActuatorConstant.STORE_NOT_EXIST);
109109
}
110110
AccountStore accountStore = chainBaseManager.getAccountStore();
111111
DynamicPropertiesStore dynamicStore = chainBaseManager.getDynamicPropertiesStore();

actuator/src/main/java/org/tron/core/actuator/ProposalApproveActuator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,10 @@ public boolean execute(Object result) throws ContractExeException {
6767
@Override
6868
public boolean validate() throws ContractValidateException {
6969
if (this.any == null) {
70-
throw new ContractValidateException("No contract!");
70+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
7171
}
7272
if (chainBaseManager == null) {
73-
throw new ContractValidateException("No account store or dynamic store!");
73+
throw new ContractValidateException(ActuatorConstant.STORE_NOT_EXIST);
7474
}
7575
AccountStore accountStore = chainBaseManager.getAccountStore();
7676
WitnessStore witnessStore = chainBaseManager.getWitnessStore();

actuator/src/main/java/org/tron/core/actuator/ProposalCreateActuator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import java.util.Objects;
1111
import lombok.extern.slf4j.Slf4j;
1212
import org.tron.common.parameter.CommonParameter;
13-
import org.tron.common.utils.DBConfig;
1413
import org.tron.common.utils.DecodeUtil;
1514
import org.tron.common.utils.StringUtil;
1615
import org.tron.core.capsule.ProposalCapsule;
@@ -75,7 +74,7 @@ public boolean execute(Object result) throws ContractExeException {
7574
@Override
7675
public boolean validate() throws ContractValidateException {
7776
if (this.any == null) {
78-
throw new ContractValidateException("No contract!");
77+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
7978
}
8079
if (chainBaseManager == null) {
8180
throw new ContractValidateException("No dbManager!");

actuator/src/main/java/org/tron/core/actuator/ProposalDeleteActuator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,10 @@ public boolean execute(Object result) throws ContractExeException {
6060
@Override
6161
public boolean validate() throws ContractValidateException {
6262
if (this.any == null) {
63-
throw new ContractValidateException("No contract!");
63+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
6464
}
6565
if (chainBaseManager == null) {
66-
throw new ContractValidateException("No account store or dynamic store!");
66+
throw new ContractValidateException(ActuatorConstant.STORE_NOT_EXIST);
6767
}
6868
AccountStore accountStore = chainBaseManager.getAccountStore();
6969
ProposalStore proposalStore = chainBaseManager.getProposalStore();

actuator/src/main/java/org/tron/core/actuator/SetAccountIdActuator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public boolean execute(Object result) throws ContractExeException {
5656
@Override
5757
public boolean validate() throws ContractValidateException {
5858
if (this.any == null) {
59-
throw new ContractValidateException("No contract!");
59+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
6060
}
6161
if (chainBaseManager == null) {
6262
throw new ContractValidateException("No account store or account id index store!");

actuator/src/main/java/org/tron/core/actuator/ShieldedTransferActuator.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.tron.core.actuator;
22

3+
import static org.tron.core.capsule.TransactionCapsule.getShieldTransactionHashIgnoreTypeException;
34
import static org.tron.core.utils.ZenChainParams.ZC_ENCCIPHERTEXT_SIZE;
45
import static org.tron.core.utils.ZenChainParams.ZC_OUTCIPHERTEXT_SIZE;
56

@@ -13,7 +14,6 @@
1314
import org.apache.commons.collections4.CollectionUtils;
1415
import org.tron.common.parameter.CommonParameter;
1516
import org.tron.common.utils.Commons;
16-
import org.tron.common.utils.DBConfig;
1717
import org.tron.common.utils.DecodeUtil;
1818
import org.tron.common.utils.Sha256Hash;
1919
import org.tron.common.zksnark.IncrementalMerkleTreeContainer;
@@ -24,7 +24,6 @@
2424
import org.tron.common.zksnark.MerkleContainer;
2525
import org.tron.core.capsule.AccountCapsule;
2626
import org.tron.core.capsule.BytesCapsule;
27-
import org.tron.core.capsule.TransactionCapsule;
2827
import org.tron.core.capsule.TransactionResultCapsule;
2928
import org.tron.core.exception.BalanceInsufficientException;
3029
import org.tron.core.exception.ContractExeException;
@@ -36,6 +35,7 @@
3635
import org.tron.core.store.DynamicPropertiesStore;
3736
import org.tron.core.store.NullifierStore;
3837
import org.tron.core.store.ZKProofStore;
38+
import org.tron.core.utils.TransactionUtil;
3939
import org.tron.protos.Protocol.AccountType;
4040
import org.tron.protos.Protocol.Transaction.Contract.ContractType;
4141
import org.tron.protos.Protocol.Transaction.Result.code;
@@ -75,7 +75,7 @@ public boolean execute(Object result)
7575
try {
7676
if (shieldedTransferContract.getTransparentFromAddress().toByteArray().length > 0) {
7777
executeTransparentFrom(shieldedTransferContract.getTransparentFromAddress().toByteArray(),
78-
shieldedTransferContract.getFromAmount(), ret,fee);
78+
shieldedTransferContract.getFromAmount(), ret, fee);
7979
}
8080
Commons.adjustAssetBalanceV2(accountStore.getBlackhole().createDbKey(),
8181
CommonParameter.getInstance().getZenTokenId(), fee,
@@ -88,11 +88,11 @@ public boolean execute(Object result)
8888
}
8989

9090
executeShielded(shieldedTransferContract.getSpendDescriptionList(),
91-
shieldedTransferContract.getReceiveDescriptionList(), ret,fee);
91+
shieldedTransferContract.getReceiveDescriptionList(), ret, fee);
9292

9393
if (shieldedTransferContract.getTransparentToAddress().toByteArray().length > 0) {
9494
executeTransparentTo(shieldedTransferContract.getTransparentToAddress().toByteArray(),
95-
shieldedTransferContract.getToAmount(), ret,fee);
95+
shieldedTransferContract.getToAmount(), ret, fee);
9696
}
9797

9898
//adjust and verify total shielded pool value
@@ -156,7 +156,7 @@ private void executeTransparentTo(byte[] toAddress, long amount, TransactionResu
156156

157157
//record shielded transaction data.
158158
private void executeShielded(List<SpendDescription> spends, List<ReceiveDescription> receives,
159-
TransactionResultCapsule ret,long fee)
159+
TransactionResultCapsule ret, long fee)
160160
throws ContractExeException {
161161

162162
NullifierStore nullifierStore = chainBaseManager.getNullifierStore();
@@ -198,10 +198,10 @@ private void executeShielded(List<SpendDescription> spends, List<ReceiveDescript
198198
@Override
199199
public boolean validate() throws ContractValidateException {
200200
if (this.any == null) {
201-
throw new ContractValidateException("No contract!");
201+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
202202
}
203203
if (chainBaseManager == null) {
204-
throw new ContractValidateException("No account store or dynamic store!");
204+
throw new ContractValidateException(ActuatorConstant.STORE_NOT_EXIST);
205205
}
206206
DynamicPropertiesStore dynamicStore = chainBaseManager.getDynamicPropertiesStore();
207207
NullifierStore nullifierStore = chainBaseManager.getNullifierStore();
@@ -226,7 +226,7 @@ public boolean validate() throws ContractValidateException {
226226
//transparent verification
227227
checkSender(shieldedTransferContract);
228228
checkReceiver(shieldedTransferContract);
229-
validateTransparent(shieldedTransferContract,fee);
229+
validateTransparent(shieldedTransferContract, fee);
230230

231231
List<SpendDescription> spendDescriptions = shieldedTransferContract.getSpendDescriptionList();
232232
// check duplicate sapling nullifiers
@@ -264,7 +264,7 @@ public boolean validate() throws ContractValidateException {
264264

265265
//check spendProofs receiveProofs and Binding sign hash
266266
try {
267-
checkProof(spendDescriptions, receiveDescriptions,fee);
267+
checkProof(spendDescriptions, receiveDescriptions, fee);
268268
} catch (ZkProofValidateException e) {
269269
if (e.isFirstValidated()) {
270270
recordProof(tx.getTransactionId(), false);
@@ -276,7 +276,7 @@ public boolean validate() throws ContractValidateException {
276276
}
277277

278278
private void checkProof(List<SpendDescription> spendDescriptions,
279-
List<ReceiveDescription> receiveDescriptions,long fee) throws ZkProofValidateException {
279+
List<ReceiveDescription> receiveDescriptions, long fee) throws ZkProofValidateException {
280280
DynamicPropertiesStore dynamicStore = chainBaseManager.getDynamicPropertiesStore();
281281
ZKProofStore proofStore = chainBaseManager.getProofStore();
282282
if (proofStore.has(tx.getTransactionId().getBytes())) {
@@ -286,8 +286,8 @@ private void checkProof(List<SpendDescription> spendDescriptions,
286286
throw new ZkProofValidateException("record is fail, skip proof", false);
287287
}
288288
}
289-
byte[] signHash = TransactionCapsule
290-
.getShieldTransactionHashIgnoreTypeException(tx.getInstance());
289+
290+
byte[] signHash = getShieldTransactionHashIgnoreTypeException(tx.getInstance());
291291

292292
if (CollectionUtils.isNotEmpty(spendDescriptions)
293293
|| CollectionUtils.isNotEmpty(receiveDescriptions)) {
@@ -391,7 +391,7 @@ private void checkReceiver(ShieldedTransferContract shieldedTransferContract)
391391
}
392392
}
393393

394-
private void validateTransparent(ShieldedTransferContract shieldedTransferContract,long fee)
394+
private void validateTransparent(ShieldedTransferContract shieldedTransferContract, long fee)
395395
throws ContractValidateException {
396396
boolean hasTransparentFrom;
397397
boolean hasTransparentTo;

actuator/src/main/java/org/tron/core/actuator/TransferActuator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,10 @@ public boolean execute(Object object) throws ContractExeException {
7171
@Override
7272
public boolean validate() throws ContractValidateException {
7373
if (this.any == null) {
74-
throw new ContractValidateException("No contract!");
74+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
7575
}
7676
if (chainBaseManager == null) {
77-
throw new ContractValidateException("No account store or dynamic store!");
77+
throw new ContractValidateException(ActuatorConstant.STORE_NOT_EXIST);
7878
}
7979
AccountStore accountStore = chainBaseManager.getAccountStore();
8080
DynamicPropertiesStore dynamicStore = chainBaseManager.getDynamicPropertiesStore();
@@ -124,8 +124,8 @@ public boolean validate() throws ContractValidateException {
124124
if (toAccount == null) {
125125
fee = fee + dynamicStore.getCreateNewAccountFeeInSystemContract();
126126
}
127-
//after TvmSolidity059 proposal, send trx to smartContract by actuator is not allowed.
128-
if (dynamicStore.getAllowTvmSolidity059() == 1
127+
//after ForbidTransferToContract proposal, send trx to smartContract by actuator is not allowed.
128+
if (dynamicStore.getForbidTransferToContract() == 1
129129
&& toAccount != null
130130
&& toAccount.getType() == AccountType.Contract) {
131131

@@ -159,4 +159,4 @@ public long calcFee() {
159159
return TRANSFER_FEE;
160160
}
161161

162-
}
162+
}

actuator/src/main/java/org/tron/core/actuator/TransferAssetActuator.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,10 @@ public boolean execute(Object result) throws ContractExeException {
103103
@Override
104104
public boolean validate() throws ContractValidateException {
105105
if (this.any == null) {
106-
throw new ContractValidateException("No contract!");
106+
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
107107
}
108108
if (chainBaseManager == null) {
109-
throw new ContractValidateException("No account store or dynamic store!");
109+
throw new ContractValidateException(ActuatorConstant.STORE_NOT_EXIST);
110110
}
111111
AccountStore accountStore = chainBaseManager.getAccountStore();
112112
DynamicPropertiesStore dynamicStore = chainBaseManager.getDynamicPropertiesStore();
@@ -176,8 +176,8 @@ public boolean validate() throws ContractValidateException {
176176

177177
AccountCapsule toAccount = accountStore.get(toAddress);
178178
if (toAccount != null) {
179-
//after TvmSolidity059 proposal, send trx to smartContract by actuator is not allowed.
180-
if (dynamicStore.getAllowTvmSolidity059() == 1
179+
//after ForbidTransferToContract proposal, send trx to smartContract by actuator is not allowed.
180+
if (dynamicStore.getForbidTransferToContract() == 1
181181
&& toAccount.getType() == AccountType.Contract) {
182182
throw new ContractValidateException("Cannot transfer asset to smartContract.");
183183
}

0 commit comments

Comments
 (0)