diff --git a/sdk-codec/src/main/java/org/fisco/bcos/sdk/codec/ABICodec.java b/sdk-codec/src/main/java/org/fisco/bcos/sdk/codec/ABICodec.java index e6d8524bb..e53a4668d 100644 --- a/sdk-codec/src/main/java/org/fisco/bcos/sdk/codec/ABICodec.java +++ b/sdk-codec/src/main/java/org/fisco/bcos/sdk/codec/ABICodec.java @@ -318,8 +318,6 @@ public byte[] encodeConstructorFromBytes(String bin, byte[] params, String abi) outputStream.write(params); } } else { - // deploy fir byte is 0, new byte[1] default is 0 - outputStream.write(new byte[1]); List deployParams = new ArrayList<>(); deployParams.add(new DynamicBytes(Hex.decode(bin))); diff --git a/sdk-codec/src/main/java/org/fisco/bcos/sdk/codec/scale/FunctionEncoder.java b/sdk-codec/src/main/java/org/fisco/bcos/sdk/codec/scale/FunctionEncoder.java index 78669c745..ae3251f56 100644 --- a/sdk-codec/src/main/java/org/fisco/bcos/sdk/codec/scale/FunctionEncoder.java +++ b/sdk-codec/src/main/java/org/fisco/bcos/sdk/codec/scale/FunctionEncoder.java @@ -32,9 +32,6 @@ public static byte[] encodeParameters(List parameters, byte[] methodID) { try { ScaleCodecWriter writer = new ScaleCodecWriter(result); if (methodID != null) { - byte[] wasmFlag = new byte[1]; - wasmFlag[0] = 1; - result.write(wasmFlag); result.write(methodID); } for (Type parameter : parameters) { diff --git a/sdk-service/src/main/java/org/fisco/bcos/sdk/client/protocol/model/tars/Transaction.java b/sdk-service/src/main/java/org/fisco/bcos/sdk/client/protocol/model/tars/Transaction.java index e8182f23a..c852096ed 100644 --- a/sdk-service/src/main/java/org/fisco/bcos/sdk/client/protocol/model/tars/Transaction.java +++ b/sdk-service/src/main/java/org/fisco/bcos/sdk/client/protocol/model/tars/Transaction.java @@ -13,6 +13,8 @@ @TarsStruct public class Transaction { + public static final int LIQUID_SCALE_CODEC = 0x2; + public static final int LIQUID_CREATE = 0x8; @TarsStructProperty(order = 1, isRequire = false) public TransactionData data = null; @@ -26,8 +28,14 @@ public class Transaction { @TarsStructProperty(order = 4, isRequire = false) public long importTime = 0L; + @TarsStructProperty(order = 5, isRequire = false) + public int attribute = 0; + + @TarsStructProperty(order = 6, isRequire = false) + public String source = ""; + public TransactionData getData() { - return this.data; + return data; } public void setData(TransactionData data) { @@ -35,7 +43,7 @@ public void setData(TransactionData data) { } public byte[] getDataHash() { - return this.dataHash; + return dataHash; } public void setDataHash(byte[] dataHash) { @@ -43,7 +51,7 @@ public void setDataHash(byte[] dataHash) { } public byte[] getSignature() { - return this.signature; + return signature; } public void setSignature(byte[] signature) { @@ -51,30 +59,56 @@ public void setSignature(byte[] signature) { } public long getImportTime() { - return this.importTime; + return importTime; } public void setImportTime(long importTime) { this.importTime = importTime; } + public int getAttribute() { + return attribute; + } + + public void setAttribute(int attribute) { + this.attribute = attribute; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + public Transaction() {} - public Transaction(TransactionData data, byte[] dataHash, byte[] signature, long importTime) { + public Transaction( + TransactionData data, + byte[] dataHash, + byte[] signature, + long importTime, + int attribute, + String source) { this.data = data; this.dataHash = dataHash; this.signature = signature; this.importTime = importTime; + this.attribute = attribute; + this.source = source; } @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + TarsUtil.hashCode(this.data); - result = prime * result + TarsUtil.hashCode(this.dataHash); - result = prime * result + TarsUtil.hashCode(this.signature); - result = prime * result + TarsUtil.hashCode(this.importTime); + result = prime * result + TarsUtil.hashCode(data); + result = prime * result + TarsUtil.hashCode(dataHash); + result = prime * result + TarsUtil.hashCode(signature); + result = prime * result + TarsUtil.hashCode(importTime); + result = prime * result + TarsUtil.hashCode(attribute); + result = prime * result + TarsUtil.hashCode(source); return result; } @@ -90,10 +124,12 @@ public boolean equals(Object obj) { return false; } Transaction other = (Transaction) obj; - return (TarsUtil.equals(this.data, other.data) - && TarsUtil.equals(this.dataHash, other.dataHash) - && TarsUtil.equals(this.signature, other.signature) - && TarsUtil.equals(this.importTime, other.importTime)); + return (TarsUtil.equals(data, other.data) + && TarsUtil.equals(dataHash, other.dataHash) + && TarsUtil.equals(signature, other.signature) + && TarsUtil.equals(importTime, other.importTime) + && TarsUtil.equals(attribute, other.attribute) + && TarsUtil.equals(source, other.source)); } @Override @@ -122,21 +158,35 @@ public String toString() { sb.append(", "); sb.append("importTime:"); sb.append(this.importTime); + sb.append(", "); + sb.append("attribute:"); + sb.append(this.attribute); + sb.append(", "); + sb.append("source:"); + if (this.source == null) { + sb.append("null"); + } else { + sb.append(this.source); + } sb.append(")"); return sb.toString(); } public void writeTo(TarsOutputStream _os) { - if (null != this.data) { - _os.write(this.data, 1); + if (null != data) { + _os.write(data, 1); + } + if (null != dataHash) { + _os.write(dataHash, 2); } - if (null != this.dataHash) { - _os.write(this.dataHash, 2); + if (null != signature) { + _os.write(signature, 3); } - if (null != this.signature) { - _os.write(this.signature, 3); + _os.write(importTime, 4); + _os.write(attribute, 5); + if (null != source) { + _os.write(source, 6); } - _os.write(this.importTime, 4); } static TransactionData cache_data; @@ -149,22 +199,24 @@ public void writeTo(TarsOutputStream _os) { static { cache_dataHash = new byte[1]; - byte var_12 = (byte) 0; - cache_dataHash[0] = var_12; + byte var_2 = (byte) 0; + cache_dataHash[0] = var_2; } static byte[] cache_signature; static { cache_signature = new byte[1]; - byte var_13 = (byte) 0; - cache_signature[0] = var_13; + byte var_3 = (byte) 0; + cache_signature[0] = var_3; } public void readFrom(TarsInputStream _is) { this.data = (TransactionData) _is.read(cache_data, 1, false); this.dataHash = (byte[]) _is.read(cache_dataHash, 2, false); this.signature = (byte[]) _is.read(cache_signature, 3, false); - this.importTime = _is.read(this.importTime, 4, false); + this.importTime = _is.read(importTime, 4, false); + this.attribute = _is.read(attribute, 5, false); + this.source = _is.readString(6, false); } } diff --git a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/contract/Contract.java b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/contract/Contract.java index b26286b7d..d0608c9bb 100644 --- a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/contract/Contract.java +++ b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/contract/Contract.java @@ -14,6 +14,9 @@ */ package org.fisco.bcos.sdk.contract; +import static org.fisco.bcos.sdk.client.protocol.model.tars.Transaction.LIQUID_CREATE; +import static org.fisco.bcos.sdk.client.protocol.model.tars.Transaction.LIQUID_SCALE_CODEC; + import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.*; @@ -289,8 +292,15 @@ protected List executeCallWithMultipleValueReturn(Function function) protected void asyncExecuteTransaction( byte[] data, String funName, TransactionCallback callback) { + int txAttribute = 0; + if (client.isWASM()) { + txAttribute = LIQUID_SCALE_CODEC; + if (funName == FUNC_DEPLOY) { + txAttribute |= LIQUID_CREATE; + } + } this.transactionProcessor.sendTransactionAsync( - this.contractAddress, data, this.credential, callback); + this.contractAddress, data, this.credential, txAttribute, callback); } protected void asyncExecuteTransaction(Function function, TransactionCallback callback) { @@ -303,8 +313,15 @@ protected TransactionReceipt executeTransaction(Function function) { } protected TransactionReceipt executeTransaction(byte[] data, String functionName) { + int txAttribute = 0; + if (client.isWASM()) { + txAttribute = LIQUID_SCALE_CODEC; + if (functionName == FUNC_DEPLOY) { + txAttribute |= LIQUID_CREATE; + } + } return this.transactionProcessor.sendTransactionAndGetReceipt( - this.contractAddress, data, this.credential); + this.contractAddress, data, this.credential, txAttribute); } /** Adds a log field to {@link EventValues}. */ @@ -331,12 +348,20 @@ public TransactionReceipt.Logs getLog() { } protected String createSignedTransaction(Function function) { + int txAttribute = 0; + if (client.isWASM()) { + txAttribute = LIQUID_SCALE_CODEC; + if (function.getName() == FUNC_DEPLOY) { + txAttribute |= LIQUID_CREATE; + } + } return this.createSignedTransaction( - this.contractAddress, this.functionEncoder.encode(function)); + this.contractAddress, this.functionEncoder.encode(function), txAttribute); } - protected String createSignedTransaction(String to, byte[] data) { - return this.transactionProcessor.createSignedTransaction(to, data, this.credential); + protected String createSignedTransaction(String to, byte[] data, int txAttribute) { + return this.transactionProcessor.createSignedTransaction( + to, data, this.credential, txAttribute); } public static EventValues staticExtractEventParameters( diff --git a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/builder/TransactionBuilderService.java b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/builder/TransactionBuilderService.java index faca14844..b75f1be9e 100644 --- a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/builder/TransactionBuilderService.java +++ b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/builder/TransactionBuilderService.java @@ -62,7 +62,8 @@ public static String createSignedTransaction( String to, String functionName, List params, - boolean isWasm) + boolean isWasm, + int txAttribute) throws ABICodecException { ABICodec abiCodec = new ABICodec(cryptoSuite, isWasm); byte[] data = abiCodec.encodeMethod(abi, functionName, params); @@ -73,7 +74,8 @@ public static String createSignedTransaction( 0, chainId, groupId, blockLimit.intValue(), randomId.toString(), to, data); TransactionEncoderService transactionEncoder = new TransactionEncoderService(cryptoSuite); - return transactionEncoder.encodeAndSign(rawTransaction, cryptoSuite.getCryptoKeyPair()); + return transactionEncoder.encodeAndSign( + rawTransaction, cryptoSuite.getCryptoKeyPair(), txAttribute); } @Override diff --git a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/encode/TransactionEncoderInterface.java b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/encode/TransactionEncoderInterface.java index bb7ed8b92..abb519d69 100644 --- a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/encode/TransactionEncoderInterface.java +++ b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/encode/TransactionEncoderInterface.java @@ -39,7 +39,8 @@ public interface TransactionEncoderInterface { * @param cryptoKeyPair keypair * @return encoded & signed transaction byte array */ - byte[] encodeAndSignBytes(TransactionData rawTransaction, CryptoKeyPair cryptoKeyPair); + byte[] encodeAndSignBytes( + TransactionData rawTransaction, CryptoKeyPair cryptoKeyPair, int attribute); /** * Tars encode and sign based on TransactionData @@ -48,7 +49,8 @@ public interface TransactionEncoderInterface { * @param cryptoKeyPair keypair * @return encoded & signed transaction hexed String */ - String encodeAndSign(TransactionData rawTransaction, CryptoKeyPair cryptoKeyPair); + String encodeAndSign( + TransactionData rawTransaction, CryptoKeyPair cryptoKeyPair, int attribute); /** * Tars encode and hash based on TransactionData @@ -67,7 +69,7 @@ public interface TransactionEncoderInterface { * @return */ byte[] encodeToTransactionBytes( - TransactionData rawTransaction, byte[] hash, SignatureResult result); + TransactionData rawTransaction, byte[] hash, SignatureResult result, int attribute); /** * Tars encode rawTransaction to Transaction bytes @@ -76,5 +78,6 @@ byte[] encodeToTransactionBytes( * @param result * @return */ - byte[] encodeToTransactionBytes(TransactionData rawTransaction, SignatureResult result); + byte[] encodeToTransactionBytes( + TransactionData rawTransaction, SignatureResult result, int attribute); } diff --git a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/encode/TransactionEncoderService.java b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/encode/TransactionEncoderService.java index bd51c816d..896c26e17 100644 --- a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/encode/TransactionEncoderService.java +++ b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/encode/TransactionEncoderService.java @@ -60,9 +60,10 @@ public byte[] encode(TransactionData rawTransaction) { } @Override - public String encodeAndSign(TransactionData rawTransaction, CryptoKeyPair cryptoKeyPair) { + public String encodeAndSign( + TransactionData rawTransaction, CryptoKeyPair cryptoKeyPair, int attribute) { return Base64.getEncoder() - .encodeToString(this.encodeAndSignBytes(rawTransaction, cryptoKeyPair)); + .encodeToString(this.encodeAndSignBytes(rawTransaction, cryptoKeyPair, attribute)); } @Override @@ -73,25 +74,28 @@ public byte[] encodeAndHashBytes(TransactionData rawTransaction) { } @Override - public byte[] encodeAndSignBytes(TransactionData rawTransaction, CryptoKeyPair cryptoKeyPair) { + public byte[] encodeAndSignBytes( + TransactionData rawTransaction, CryptoKeyPair cryptoKeyPair, int attribute) { byte[] hash = this.encodeAndHashBytes(rawTransaction); SignatureResult result = this.transactionSignerService.sign(hash, cryptoKeyPair); - return this.encodeToTransactionBytes(rawTransaction, hash, result); + return this.encodeToTransactionBytes(rawTransaction, hash, result, attribute); } @Override public byte[] encodeToTransactionBytes( - TransactionData rawTransaction, byte[] hash, SignatureResult result) { - Transaction transaction = new Transaction(rawTransaction, hash, result.encode(), 0); + TransactionData rawTransaction, byte[] hash, SignatureResult result, int attribute) { + Transaction transaction = + new Transaction(rawTransaction, hash, result.encode(), 0, attribute, null); TarsOutputStream tarsOutputStream = new TarsOutputStream(); transaction.writeTo(tarsOutputStream); return tarsOutputStream.toByteArray(); } @Override - public byte[] encodeToTransactionBytes(TransactionData rawTransaction, SignatureResult result) { + public byte[] encodeToTransactionBytes( + TransactionData rawTransaction, SignatureResult result, int attribute) { byte[] hash = this.cryptoSuite.hash(encode(rawTransaction)); - return encodeToTransactionBytes(rawTransaction, hash, result); + return encodeToTransactionBytes(rawTransaction, hash, result, attribute); } /** @return the signature */ diff --git a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionProcessor.java b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionProcessor.java index 6900e656f..ab1022b72 100644 --- a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionProcessor.java +++ b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionProcessor.java @@ -14,6 +14,9 @@ */ package org.fisco.bcos.sdk.transaction.manager; +import static org.fisco.bcos.sdk.client.protocol.model.tars.Transaction.LIQUID_CREATE; +import static org.fisco.bcos.sdk.client.protocol.model.tars.Transaction.LIQUID_SCALE_CODEC; + import java.io.IOException; import java.math.BigInteger; import java.util.List; @@ -97,7 +100,12 @@ public void deployOnly(String abi, String bin, List params) throws ABICo @Override public TransactionReceipt deployAndGetReceipt(byte[] data) { - String signedData = this.createSignedTransaction(null, data, this.cryptoKeyPair); + int txAttribute = 0; + if (client.isWASM()) { + txAttribute = LIQUID_CREATE | LIQUID_SCALE_CODEC; + } + String signedData = + this.createSignedTransaction(null, data, this.cryptoKeyPair, txAttribute); return this.transactionPusher.push(signedData); } @@ -122,12 +130,17 @@ public TransactionResponse deployAndGetResponse(String abi, String bin, List params, String path) throws ABICodecException { + int txAttribute = 0; + if (client.isWASM()) { + txAttribute = LIQUID_CREATE | LIQUID_SCALE_CODEC; + } return this.deployAndGetResponse( abi, this.createSignedTransaction( path, this.abiCodec.encodeConstructorFromString(abi, bin, params), - this.cryptoKeyPair)); + this.cryptoKeyPair, + txAttribute)); } @Override @@ -181,7 +194,11 @@ public void sendTransactionOnly(String signedData) { @Override public TransactionResponse sendTransactionAndGetResponse( String to, String abi, String functionName, byte[] data) throws ABICodecException { - String signedData = this.createSignedTransaction(to, data, this.cryptoKeyPair); + int txAttribute = 0; + if (client.isWASM()) { + txAttribute = LIQUID_SCALE_CODEC; + } + String signedData = this.createSignedTransaction(to, data, this.cryptoKeyPair, txAttribute); TransactionReceipt receipt = this.transactionPusher.push(signedData); try { return this.transactionDecoder.decodeReceiptWithValues(abi, functionName, receipt); @@ -216,7 +233,12 @@ public TransactionReceipt sendTransactionAndGetReceiptByContractLoader( byte[] data = this.abiCodec.encodeMethod( this.contractLoader.getABIByContractName(contractName), functionName, args); - return this.sendTransactionAndGetReceipt(contractAddress, data, this.cryptoKeyPair); + int txAttribute = 0; + if (client.isWASM()) { + txAttribute = LIQUID_SCALE_CODEC; + } + return this.sendTransactionAndGetReceipt( + contractAddress, data, this.cryptoKeyPair, txAttribute); } @Override @@ -247,7 +269,11 @@ public void sendTransactionAsync( TransactionCallback callback) throws TransactionBaseException, ABICodecException { byte[] data = this.encodeFunction(abi, functionName, params); - this.sendTransactionAsync(to, data, this.cryptoKeyPair, callback); + int txAttribute = 0; + if (client.isWASM()) { + txAttribute = LIQUID_SCALE_CODEC; + } + this.sendTransactionAsync(to, data, this.cryptoKeyPair, txAttribute, callback); } @Override @@ -266,7 +292,11 @@ public void sendTransactionAndGetReceiptByContractLoaderAsync( byte[] data = this.abiCodec.encodeMethod( this.contractLoader.getABIByContractName(contractName), functionName, args); - this.sendTransactionAsync(contractAddress, data, this.cryptoKeyPair, callback); + int txAttribute = 0; + if (client.isWASM()) { + txAttribute = LIQUID_SCALE_CODEC; + } + this.sendTransactionAsync(contractAddress, data, this.cryptoKeyPair, txAttribute, callback); } @Override @@ -327,8 +357,15 @@ public CallResponse callAndGetResponse( @Override public String createSignedConstructor(String abi, String bin, List params) throws ABICodecException { + int txAttribute = 0; + if (client.isWASM()) { + txAttribute = LIQUID_CREATE | LIQUID_SCALE_CODEC; + } return this.createSignedTransaction( - null, this.abiCodec.encodeConstructor(abi, bin, params), this.cryptoKeyPair); + null, + this.abiCodec.encodeConstructor(abi, bin, params), + this.cryptoKeyPair, + txAttribute); } @Override diff --git a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionWithRemoteSignProcessor.java b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionWithRemoteSignProcessor.java index 0e65fcd60..4c1a77590 100644 --- a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionWithRemoteSignProcessor.java +++ b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionWithRemoteSignProcessor.java @@ -1,5 +1,8 @@ package org.fisco.bcos.sdk.transaction.manager; +import static org.fisco.bcos.sdk.client.protocol.model.tars.Transaction.LIQUID_CREATE; +import static org.fisco.bcos.sdk.client.protocol.model.tars.Transaction.LIQUID_SCALE_CODEC; + import java.util.List; import java.util.concurrent.CompletableFuture; import org.bouncycastle.util.encoders.Hex; @@ -58,6 +61,10 @@ public TransactionResponse deployAndGetResponse(String abi, String bin, List deployAsync( String abi, String bin, List params) throws ABICodecException { TransactionData rawTransaction = this.getRawTransactionForConstructor(abi, bin, params); byte[] rawTxHash = this.transactionEncoder.encodeAndHashBytes(rawTransaction); - return this.signAndPush(rawTransaction, rawTxHash); + int txAttribute = 0; + if (client.isWASM()) { + txAttribute = LIQUID_CREATE | LIQUID_SCALE_CODEC; + } + return this.signAndPush(rawTransaction, rawTxHash, txAttribute); } @Override @@ -133,11 +144,16 @@ public CompletableFuture sendTransactionAsync( throws ABICodecException { TransactionData rawTransaction = this.getRawTransaction(to, abi, functionName, params); byte[] rawTxHash = this.transactionEncoder.encodeAndHashBytes(rawTransaction); - return this.signAndPush(rawTransaction, rawTxHash); + int txAttribute = 0; + if (client.isWASM()) { + txAttribute = LIQUID_SCALE_CODEC; + } + return this.signAndPush(rawTransaction, rawTxHash, txAttribute); } @Override - public TransactionReceipt encodeAndPush(TransactionData rawTransaction, String signatureStr) { + public TransactionReceipt encodeAndPush( + TransactionData rawTransaction, String signatureStr, int txAttribute) { SignatureResult signatureResult = TransactionSignerServcie.decodeSignatureString( signatureStr, @@ -146,13 +162,13 @@ public TransactionReceipt encodeAndPush(TransactionData rawTransaction, String s byte[] rawTxHash = this.transactionEncoder.encodeAndHashBytes(rawTransaction); byte[] signedTransaction = this.transactionEncoder.encodeToTransactionBytes( - rawTransaction, rawTxHash, signatureResult); + rawTransaction, rawTxHash, signatureResult, txAttribute); return this.transactionPusher.push(Hex.toHexString(signedTransaction)); } @Override public CompletableFuture signAndPush( - TransactionData rawTransaction, byte[] rawTxHash) { + TransactionData rawTransaction, byte[] rawTxHash, int txAttribute) { CompletableFuture future = CompletableFuture.supplyAsync( () -> @@ -172,7 +188,8 @@ public CompletableFuture signAndPush( "Request remote signature is null"); return null; } - return this.encodeAndPush(rawTransaction, s.convertToString()); + return this.encodeAndPush( + rawTransaction, s.convertToString(), txAttribute); }); AssembleTransactionProcessor.log.info("Sign and push over, wait for callback..."); return cr; diff --git a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionWithRemoteSignProviderInterface.java b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionWithRemoteSignProviderInterface.java index 2e573ee10..d39390578 100644 --- a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionWithRemoteSignProviderInterface.java +++ b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionWithRemoteSignProviderInterface.java @@ -108,7 +108,8 @@ public CompletableFuture sendTransactionAsync( * @param signatureStr signature string. * @return TransactionReceipt */ - TransactionReceipt encodeAndPush(TransactionData rawTransaction, String signatureStr); + TransactionReceipt encodeAndPush( + TransactionData rawTransaction, String signatureStr, int txAttribute); /** * sign based on raw transaction and send to fisco bcos node. @@ -118,5 +119,5 @@ public CompletableFuture sendTransactionAsync( * @return TransactionReceipt */ CompletableFuture signAndPush( - TransactionData rawTransaction, byte[] rawTxHash); + TransactionData rawTransaction, byte[] rawTxHash, int txAttribute); } diff --git a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/TransactionProcessor.java b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/TransactionProcessor.java index f12b9cbbc..247cf4370 100644 --- a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/TransactionProcessor.java +++ b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/TransactionProcessor.java @@ -54,15 +54,19 @@ public TransactionProcessor( @Override public TransactionReceipt sendTransactionAndGetReceipt( - String to, byte[] data, CryptoKeyPair cryptoKeyPair) { - String signedData = this.createSignedTransaction(to, data, cryptoKeyPair); + String to, byte[] data, CryptoKeyPair cryptoKeyPair, int txAttribute) { + String signedData = this.createSignedTransaction(to, data, cryptoKeyPair, txAttribute); return this.client.sendTransaction(signedData, false).getTransactionReceipt(); } @Override public void sendTransactionAsync( - String to, byte[] data, CryptoKeyPair cryptoKeyPair, TransactionCallback callback) { - String signedData = this.createSignedTransaction(to, data, cryptoKeyPair); + String to, + byte[] data, + CryptoKeyPair cryptoKeyPair, + int txAttribute, + TransactionCallback callback) { + String signedData = this.createSignedTransaction(to, data, cryptoKeyPair, txAttribute); this.client.sendTransactionAsync(signedData, false, callback); } @@ -79,9 +83,10 @@ public Call executeCall(String from, String to, byte[] encodedFunction) { } @Override - public String createSignedTransaction(String to, byte[] data, CryptoKeyPair cryptoKeyPair) { + public String createSignedTransaction( + String to, byte[] data, CryptoKeyPair cryptoKeyPair, int txAttribute) { TransactionData rawTransaction = this.transactionBuilder.createTransaction(to, data, this.chainId, this.groupId); - return this.transactionEncoder.encodeAndSign(rawTransaction, cryptoKeyPair); + return this.transactionEncoder.encodeAndSign(rawTransaction, cryptoKeyPair, txAttribute); } } diff --git a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/TransactionProcessorInterface.java b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/TransactionProcessorInterface.java index b2f0098fc..796d2ed17 100644 --- a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/TransactionProcessorInterface.java +++ b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/manager/TransactionProcessorInterface.java @@ -36,7 +36,7 @@ public interface TransactionProcessorInterface { * @return transaction receipt */ public TransactionReceipt sendTransactionAndGetReceipt( - String to, byte[] data, CryptoKeyPair cryptoKeyPair); + String to, byte[] data, CryptoKeyPair cryptoKeyPair, int txAttribute); /** * send transaction to fisco bcos node and get transaction receipt asynchronously. @@ -47,7 +47,11 @@ public TransactionReceipt sendTransactionAndGetReceipt( * @param callback define hook function */ public void sendTransactionAsync( - String to, byte[] data, CryptoKeyPair cryptoKeyPair, TransactionCallback callback); + String to, + byte[] data, + CryptoKeyPair cryptoKeyPair, + int txAttribute, + TransactionCallback callback); /** * send call to fisco bcos node and receive call response. @@ -75,5 +79,6 @@ public void sendTransactionAsync( * @param cryptoKeyPair key pair * @return hexed data of signed transaction */ - public String createSignedTransaction(String to, byte[] data, CryptoKeyPair cryptoKeyPair); + public String createSignedTransaction( + String to, byte[] data, CryptoKeyPair cryptoKeyPair, int txAttribute); } diff --git a/src/integration-test/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionProcessorTest.java b/src/integration-test/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionProcessorTest.java index 41a21f52b..84072280a 100644 --- a/src/integration-test/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionProcessorTest.java +++ b/src/integration-test/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionProcessorTest.java @@ -387,7 +387,7 @@ public void test8ComplexSetBytesFuture() throws Exception { byte[] data = transactionProcessor.encodeFunction(ABI, "setBytes", paramsSetBytes); String signedData = transactionProcessor.createSignedTransaction( - contractAddress, data, this.cryptoKeyPair); + contractAddress, data, this.cryptoKeyPair, 0); CompletableFuture future = transactionProcessor.sendTransactionAsync(signedData); future.thenAccept( diff --git a/src/integration-test/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionWithRemoteSignProcessorTest.java b/src/integration-test/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionWithRemoteSignProcessorTest.java index a5f27636d..21b0239a4 100644 --- a/src/integration-test/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionWithRemoteSignProcessorTest.java +++ b/src/integration-test/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionWithRemoteSignProcessorTest.java @@ -142,7 +142,7 @@ public void test2HelloWorldAsync() throws Exception { // mock a sign callback RemoteSignCallbackMock callbackMock = new RemoteSignCallbackMock( - assembleTransactionWithRemoteSignProcessor, rawTransaction); + assembleTransactionWithRemoteSignProcessor, rawTransaction, 0); System.out.println(System.currentTimeMillis() + " begin to deploy: "); assembleTransactionWithRemoteSignProcessor.deployAsync(rawTransaction, callbackMock); // will return first, and the hook function would be called async. @@ -172,7 +172,7 @@ public void test2HelloWorldAsync() throws Exception { // create an instance of Remote Sign Service callback, and define the hook function. RemoteSignCallbackMock callbackMock2 = new RemoteSignCallbackMock( - assembleTransactionWithRemoteSignProcessor, sendTxRawTransaction); + assembleTransactionWithRemoteSignProcessor, sendTxRawTransaction, 0); System.out.println(System.currentTimeMillis() + " begin to send tx with callback: "); assembleTransactionWithRemoteSignProcessor.sendTransactionAsync( helloWorldAddress, abi, "set", this.params, callbackMock2); diff --git a/src/integration-test/java/org/fisco/bcos/sdk/transaction/mock/RemoteSignCallbackMock.java b/src/integration-test/java/org/fisco/bcos/sdk/transaction/mock/RemoteSignCallbackMock.java index 15b64f133..599ad1b6a 100644 --- a/src/integration-test/java/org/fisco/bcos/sdk/transaction/mock/RemoteSignCallbackMock.java +++ b/src/integration-test/java/org/fisco/bcos/sdk/transaction/mock/RemoteSignCallbackMock.java @@ -11,13 +11,16 @@ public class RemoteSignCallbackMock implements RemoteSignCallbackInterface { protected AssembleTransactionWithRemoteSignProcessor assembleTransactionWithRemoteSignProcessor; protected TransactionData rawTransaction; + protected int txAttribute; public RemoteSignCallbackMock( AssembleTransactionWithRemoteSignProcessor assembleTransactionWithRemoteSignProcessor, - TransactionData rawTransaction) { + TransactionData rawTransaction, + int txAttribute) { this.assembleTransactionWithRemoteSignProcessor = assembleTransactionWithRemoteSignProcessor; this.rawTransaction = rawTransaction; + this.txAttribute = txAttribute; } /** @@ -32,7 +35,7 @@ public int handleSignedTransaction(SignatureResult signatureStr) { // 完成了交易签名后,将其发送出去 TransactionReceipt tr = assembleTransactionWithRemoteSignProcessor.encodeAndPush( - rawTransaction, signatureStr.convertToString()); + rawTransaction, signatureStr.convertToString(), this.txAttribute); System.out.println( "handleSignedTransaction transactionReceipt is: " + JsonUtils.toJson(tr)); return 0;