Skip to content

Commit 842484c

Browse files
authored
Merge pull request #413 from tronprotocol/my_shielded
refactor demo
2 parents 50c03de + e2e83d3 commit 842484c

File tree

1 file changed

+25
-60
lines changed

1 file changed

+25
-60
lines changed

src/main/java/org/tron/demo/ShieldedTRC20Demo.java

Lines changed: 25 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,8 @@
2929
import org.tron.core.exception.ZksnarkException;
3030
import org.tron.core.zen.address.DiversifierT;
3131
import org.tron.core.zen.address.ExpandedSpendingKey;
32-
import org.tron.core.zen.address.FullViewingKey;
3332
import org.tron.core.zen.address.IncomingViewingKey;
3433
import org.tron.core.zen.address.KeyIo;
35-
import org.tron.core.zen.address.PaymentAddress;
3634
import org.tron.core.zen.address.SpendingKey;
3735
import org.tron.protos.Protocol;
3836
import org.tron.protos.Protocol.Transaction;
@@ -47,9 +45,10 @@
4745
@Slf4j
4846
public class ShieldedTRC20Demo {
4947

50-
private String trc20 = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t";
51-
private String shieldedTRC20 = "TQEuSEVRk1GtfExm5q9T8a1w84GvgQJ13V";
52-
private byte[] deShieldedTRC20 = WalletApi.decodeFromBase58Check(shieldedTRC20);
48+
private byte[] trc20 = WalletApi.decodeFromBase58Check(
49+
"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t");
50+
private byte[] shieldedTRC20 = WalletApi.decodeFromBase58Check(
51+
"TQEuSEVRk1GtfExm5q9T8a1w84GvgQJ13V");
5352

5453
private String privateKey = "your private key of transparent address";
5554

@@ -69,10 +68,10 @@ public static void main(String[] args) throws ZksnarkException, InterruptedExcep
6968
demo.transferDemo(demo.privateKey, 5, demo.shieldedKey.getKioAddress(),
7069
2, 3);
7170
demo.burnDemo(demo.privateKey, 5, demo.shieldedKey.getKioAddress(), 3,
72-
getAddressFromPK(demo.privateKey), 2);
71+
getAddressFromPk(demo.privateKey), 2);
7372
}
7473

75-
public static byte[] getAddressFromPK(String pk) {
74+
public static byte[] getAddressFromPk(String pk) {
7675
ECKey ecKey = ECKey.fromPrivate(ByteArray.fromHexString(pk));
7776
return ecKey.getAddress();
7877
}
@@ -149,7 +148,7 @@ public void setTransparent(PrivateShieldedTRC20Parameters.Builder paramBuilder,
149148
}
150149

151150
public void setContractAddress(PrivateShieldedTRC20Parameters.Builder paramBuilder) {
152-
paramBuilder.setShieldedTRC20ContractAddress(ByteString.copyFrom(deShieldedTRC20));
151+
paramBuilder.setShieldedTRC20ContractAddress(ByteString.copyFrom(shieldedTRC20));
153152
}
154153

155154
public void setKey(PrivateShieldedTRC20Parameters.Builder paramBuilder, byte[] ask, byte[] nsk,
@@ -193,7 +192,7 @@ public void transferDemo(String fromPrivate, long fromAmount, String toShieldedA
193192
PrivateShieldedTRC20Parameters.newBuilder();
194193
//set spend note
195194
Note note = buildNote(5, toShieldedAddress, ByteArray.fromHexString(rcm), new byte[512]);
196-
privateTRC20Builder.addShieldedSpends(getSpendNote(infoById.get(), note, deShieldedTRC20));
195+
privateTRC20Builder.addShieldedSpends(getSpendNote(infoById.get(), note, shieldedTRC20));
197196
//set receive note 1
198197
addReceiveShieldedNote(privateTRC20Builder, toShieldedAddress, toAmount1);
199198
//set receive note 2
@@ -206,7 +205,7 @@ public void transferDemo(String fromPrivate, long fromAmount, String toShieldedA
206205

207206
GrpcAPI.ShieldedTRC20Parameters transferParam = WalletApi
208207
.createShieldedContractParameters(privateTRC20Builder.build());
209-
triggerTransfer(deShieldedTRC20, privateKey, transferParam.getTriggerContractInput());
208+
triggerTransfer(shieldedTRC20, privateKey, transferParam.getTriggerContractInput());
210209
}
211210

212211
public void burnDemo(String fromPrivate, long fromAmount, String toShieldedAddress,
@@ -224,7 +223,7 @@ public void burnDemo(String fromPrivate, long fromAmount, String toShieldedAddre
224223
//set transparent
225224
setTransparent(privateTRC20Builder, 0, toTransparentAddress, toTransparentAmount);
226225
//set spend note
227-
privateTRC20Builder.addShieldedSpends(getSpendNote(infoById.get(), note, deShieldedTRC20));
226+
privateTRC20Builder.addShieldedSpends(getSpendNote(infoById.get(), note, shieldedTRC20));
228227
//set receive note
229228
addReceiveShieldedNote(privateTRC20Builder, toShieldedAddress, toShieldedAmount);
230229
//set contract address
@@ -233,11 +232,10 @@ public void burnDemo(String fromPrivate, long fromAmount, String toShieldedAddre
233232
GrpcAPI.ShieldedTRC20Parameters burnParam = WalletApi
234233
.createShieldedContractParameters(privateTRC20Builder.build());
235234

236-
triggerBurn(deShieldedTRC20, privateKey, burnParam.getTriggerContractInput());
235+
triggerBurn(shieldedTRC20, privateKey, burnParam.getTriggerContractInput());
237236
}
238237

239-
private static GrpcAPI.Note buildNote(
240-
long value, String paymentAddress, byte[] rcm, byte[] memo) {
238+
public GrpcAPI.Note buildNote(long value, String paymentAddress, byte[] rcm, byte[] memo) {
241239
GrpcAPI.Note.Builder noteBuilder = GrpcAPI.Note.newBuilder();
242240
noteBuilder.setValue(value);
243241
noteBuilder.setPaymentAddress(paymentAddress);
@@ -246,8 +244,7 @@ private static GrpcAPI.Note buildNote(
246244
return noteBuilder.build();
247245
}
248246

249-
private SpendNoteTRC20 getSpendNote(TransactionInfo txInfo,
250-
Note note, byte[] contractAddress) {
247+
public SpendNoteTRC20 getSpendNote(TransactionInfo txInfo, Note note, byte[] contractAddress) {
251248
byte[] txData = txInfo.getLog(1).getData().toByteArray();
252249
long pos = bytes32ToLong(ByteArray.subArray(txData, 0, 32));
253250
byte[] contractResult = triggerGetPath(contractAddress, pos);
@@ -266,7 +263,7 @@ private String triggerMint(String privateKey, String input) {
266263
String methodSign = "mint(uint256,bytes32[9],bytes32[2],bytes32[21])";
267264
byte[] selector = new byte[4];
268265
System.arraycopy(Hash.sha3(methodSign.getBytes()), 0, selector, 0, 4);
269-
return triggerContract(deShieldedTRC20,
266+
return triggerContract(shieldedTRC20,
270267
"mint(uint256,bytes32[9],bytes32[2],bytes32[21])",
271268
input,
272269
true,
@@ -284,7 +281,7 @@ private String triggerTransfer(byte[] contractAddress, String privateKey, String
284281
"0",
285282
0,
286283
privateKey);
287-
Optional<TransactionInfo> infoById = WalletApi.getTransactionInfoById(txid);
284+
WalletApi.getTransactionInfoById(txid);
288285
return txid;
289286
}
290287

@@ -297,7 +294,7 @@ private String triggerBurn(byte[] contractAddress, String privateKey, String inp
297294
0L, 100000000L,
298295
"0",
299296
0,
300-
privateKey);
297+
privateKey);
301298
}
302299

303300

@@ -318,7 +315,7 @@ private String triggerContract(byte[] contractAddress, String method, String arg
318315
argsStr = "";
319316
}
320317

321-
byte[] owner = getAddressFromPK(priKey);
318+
byte[] owner = getAddressFromPk(priKey);
322319
byte[] input = Hex.decode(AbiUtil.parseMethod(method, argsStr, isHex));
323320
TriggerSmartContract.Builder builder = TriggerSmartContract.newBuilder();
324321
builder.setOwnerAddress(ByteString.copyFrom(owner));
@@ -391,8 +388,7 @@ private String triggerContract(byte[] contractAddress, String method, String arg
391388
return txid;
392389
}
393390

394-
public static Protocol.Transaction signTransaction(ECKey ecKey,
395-
Protocol.Transaction transaction) {
391+
public static Protocol.Transaction signTransaction(ECKey ecKey, Transaction transaction) {
396392
WalletApi.setAddressPreFixByte(CommonConstant.ADD_PRE_FIX_BYTE_MAINNET);
397393
if (ecKey == null || ecKey.getPrivKey() == null) {
398394
//logger.warn("Warning: Can't sign,there is no private key !!");
@@ -405,12 +401,11 @@ public static Protocol.Transaction signTransaction(ECKey ecKey,
405401
}
406402

407403
private BigInteger getScalingFactorBi() {
408-
byte[] scalingFactorBytes = triggerGetScalingFactor(deShieldedTRC20);
404+
byte[] scalingFactorBytes = triggerGetScalingFactor(shieldedTRC20);
409405
return ByteUtil.bytesToBigInteger(scalingFactorBytes);
410406
}
411407

412-
private byte[] triggerGetScalingFactor(
413-
byte[] contractAddress) {
408+
private byte[] triggerGetScalingFactor(byte[] contractAddress) {
414409
String methodSign = "scalingFactor()";
415410
byte[] selector = new byte[4];
416411
System.arraycopy(Hash.sha3(methodSign.getBytes()), 0, selector, 0, 4);
@@ -429,52 +424,22 @@ private byte[] triggerGetScalingFactor(
429424
return result;
430425
}
431426

432-
private String getScaledPublicAmount(long amount) {
427+
public String getScaledPublicAmount(long amount) {
433428
BigInteger result = BigInteger.valueOf(amount).multiply(scalingFactorBi);
434429
return result.toString();
435430
}
436431

437-
private void setAllowance(String privateKey, long amount) {
438-
byte[] contractAddress = WalletApi.decodeFromBase58Check(trc20);
432+
public void setAllowance(String privateKey, long amount) {
439433
byte[] shieldedContractAddressPadding = new byte[32];
440-
System.arraycopy(deShieldedTRC20, 0,
434+
System.arraycopy(shieldedTRC20, 0,
441435
shieldedContractAddressPadding, 11, 21);
442436
byte[] valueBytes = longTo32Bytes(amount);
443437
String input = Hex.toHexString(ByteUtil.merge(shieldedContractAddressPadding, valueBytes));
444-
triggerContract(contractAddress, "approve(address,uint256)", input, true,
438+
triggerContract(trc20, "approve(address,uint256)", input, true,
445439
0L, 10000000L, "0", 0, privateKey);
446440
}
447441

448-
private PrivateShieldedTRC20Parameters mintParams(long value, String contractAddr)
449-
throws ZksnarkException {
450-
BigInteger fromAmount = BigInteger.valueOf(value).multiply(scalingFactorBi);
451-
SpendingKey spendingKey = new SpendingKey(ByteArray.fromHexString(sk));
452-
ExpandedSpendingKey expsk = spendingKey.expandedSpendingKey();
453-
byte[] ovk = expsk.getOvk();
454-
455-
// ReceiveNote
456-
GrpcAPI.ReceiveNote.Builder revNoteBuilder = GrpcAPI.ReceiveNote.newBuilder();
457-
// SpendingKey spendingKey = SpendingKey.random();
458-
FullViewingKey fullViewingKey = spendingKey.fullViewingKey();
459-
IncomingViewingKey incomingViewingKey = fullViewingKey.inViewingKey();
460-
PaymentAddress paymentAddress = incomingViewingKey.address(new DiversifierT().random()).get();
461-
byte[] memo = new byte[512];
462-
// byte[] rcm = WalletApi.getRcm().get().getValue().toByteArray();
463-
String paymentAddressStr = KeyIo.encodePaymentAddress(paymentAddress);
464-
GrpcAPI.Note revNote = buildNote(value, paymentAddressStr, ByteArray.fromHexString(rcm), memo);
465-
revNoteBuilder.setNote(revNote);
466-
byte[] contractAddress = WalletApi.decodeFromBase58Check(contractAddr);
467-
468-
GrpcAPI.PrivateShieldedTRC20Parameters.Builder paramBuilder = GrpcAPI
469-
.PrivateShieldedTRC20Parameters.newBuilder();
470-
paramBuilder.setOvk(ByteString.copyFrom(ovk));
471-
paramBuilder.setFromAmount(fromAmount.toString());
472-
paramBuilder.addShieldedReceives(revNoteBuilder.build());
473-
paramBuilder.setShieldedTRC20ContractAddress(ByteString.copyFrom(contractAddress));
474-
return paramBuilder.build();
475-
}
476-
477-
private byte[] triggerGetPath(byte[] contractAddress, long pos) {
442+
public byte[] triggerGetPath(byte[] contractAddress, long pos) {
478443
String methodSign = "getPath(uint256)";
479444
byte[] selector = new byte[4];
480445
System.arraycopy(Hash.sha3(methodSign.getBytes()), 0, selector, 0, 4);

0 commit comments

Comments
 (0)