Skip to content

Commit d6ff733

Browse files
authored
feat(mechanism): add stake info for log trigger (#5419)
1 parent 068764b commit d6ff733

File tree

3 files changed

+250
-0
lines changed

3 files changed

+250
-0
lines changed

common/src/main/java/org/tron/common/logsfilter/trigger/TransactionLogTrigger.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.tron.common.logsfilter.trigger;
22

33
import java.util.List;
4+
import java.util.Map;
5+
46
import lombok.Getter;
57
import lombok.Setter;
68

@@ -91,6 +93,10 @@ public class TransactionLogTrigger extends Trigger {
9193
@Setter
9294
private long energyUnitPrice;
9395

96+
@Getter
97+
@Setter
98+
private Map<String, Long> extMap;
99+
94100
public TransactionLogTrigger() {
95101
setTriggerName(Trigger.TRANSACTION_TRIGGER_NAME);
96102
}

framework/src/main/java/org/tron/common/logsfilter/capsule/TransactionLogTriggerCapsule.java

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.tron.common.logsfilter.capsule;
22

33
import static org.tron.protos.Protocol.Transaction.Contract.ContractType.CreateSmartContract;
4+
import static org.tron.protos.contract.Common.ResourceCode.ENERGY;
45

56
import com.google.protobuf.Any;
67
import com.google.protobuf.ByteString;
@@ -26,7 +27,14 @@
2627
import org.tron.protos.Protocol.Transaction.Contract.ContractType;
2728
import org.tron.protos.Protocol.TransactionInfo;
2829
import org.tron.protos.contract.AssetIssueContractOuterClass.TransferAssetContract;
30+
import org.tron.protos.contract.BalanceContract.CancelAllUnfreezeV2Contract;
31+
import org.tron.protos.contract.BalanceContract.DelegateResourceContract;
32+
import org.tron.protos.contract.BalanceContract.FreezeBalanceV2Contract;
2933
import org.tron.protos.contract.BalanceContract.TransferContract;
34+
import org.tron.protos.contract.BalanceContract.UnDelegateResourceContract;
35+
import org.tron.protos.contract.BalanceContract.UnfreezeBalanceContract;
36+
import org.tron.protos.contract.BalanceContract.UnfreezeBalanceV2Contract;
37+
import org.tron.protos.contract.BalanceContract.WithdrawExpireUnfreezeContract;
3038
import org.tron.protos.contract.SmartContractOuterClass.CreateSmartContract;
3139
import org.tron.protos.contract.SmartContractOuterClass.TriggerSmartContract;
3240

@@ -156,6 +164,82 @@ public TransactionLogTriggerCapsule(TransactionCapsule trxCapsule, BlockCapsule
156164
StringUtil.encode58Check(createSmartContract.getOwnerAddress().toByteArray()));
157165
}
158166
break;
167+
case UnfreezeBalanceContract:
168+
UnfreezeBalanceContract unfreezeBalanceContract = contractParameter
169+
.unpack(UnfreezeBalanceContract.class);
170+
171+
transactionLogTrigger.setFromAddress(StringUtil
172+
.encode58Check(unfreezeBalanceContract.getOwnerAddress().toByteArray()));
173+
if (!ByteString.EMPTY.equals(unfreezeBalanceContract.getReceiverAddress())) {
174+
transactionLogTrigger.setToAddress(StringUtil
175+
.encode58Check(unfreezeBalanceContract.getReceiverAddress().toByteArray()));
176+
}
177+
transactionLogTrigger.setAssetName("trx");
178+
transactionLogTrigger.setAssetAmount(
179+
transactionInfo.getUnfreezeAmount());
180+
break;
181+
case FreezeBalanceV2Contract:
182+
FreezeBalanceV2Contract freezeBalanceV2Contract = contractParameter
183+
.unpack(FreezeBalanceV2Contract.class);
184+
185+
transactionLogTrigger.setFromAddress(StringUtil
186+
.encode58Check(freezeBalanceV2Contract.getOwnerAddress().toByteArray()));
187+
transactionLogTrigger.setAssetName("trx");
188+
transactionLogTrigger.setAssetAmount(freezeBalanceV2Contract.getFrozenBalance());
189+
break;
190+
case UnfreezeBalanceV2Contract:
191+
UnfreezeBalanceV2Contract unfreezeBalanceV2Contract = contractParameter
192+
.unpack(UnfreezeBalanceV2Contract.class);
193+
194+
transactionLogTrigger.setFromAddress(StringUtil
195+
.encode58Check(unfreezeBalanceV2Contract.getOwnerAddress().toByteArray()));
196+
transactionLogTrigger.setAssetName("trx");
197+
transactionLogTrigger.setAssetAmount(
198+
unfreezeBalanceV2Contract.getUnfreezeBalance());
199+
break;
200+
case WithdrawExpireUnfreezeContract:
201+
WithdrawExpireUnfreezeContract withdrawExpireUnfreezeContract = contractParameter
202+
.unpack(WithdrawExpireUnfreezeContract.class);
203+
204+
transactionLogTrigger.setFromAddress(StringUtil.encode58Check(
205+
withdrawExpireUnfreezeContract.getOwnerAddress().toByteArray()));
206+
transactionLogTrigger.setAssetName("trx");
207+
transactionLogTrigger.setAssetAmount(transactionInfo.getWithdrawExpireAmount());
208+
break;
209+
case DelegateResourceContract:
210+
DelegateResourceContract delegateResourceContract = contractParameter
211+
.unpack(DelegateResourceContract.class);
212+
213+
transactionLogTrigger.setFromAddress(StringUtil
214+
.encode58Check(delegateResourceContract.getOwnerAddress().toByteArray()));
215+
transactionLogTrigger.setToAddress(StringUtil
216+
.encode58Check(delegateResourceContract.getReceiverAddress().toByteArray()));
217+
transactionLogTrigger.setAssetName("trx");
218+
transactionLogTrigger.setAssetAmount(
219+
delegateResourceContract.getBalance());
220+
break;
221+
case UnDelegateResourceContract:
222+
UnDelegateResourceContract unDelegateResourceContract = contractParameter
223+
.unpack(UnDelegateResourceContract.class);
224+
225+
transactionLogTrigger.setFromAddress(StringUtil
226+
.encode58Check(unDelegateResourceContract.getOwnerAddress().toByteArray()));
227+
transactionLogTrigger.setToAddress(StringUtil.encode58Check(
228+
unDelegateResourceContract.getReceiverAddress().toByteArray()));
229+
230+
transactionLogTrigger.setAssetName("trx");
231+
transactionLogTrigger.setAssetAmount(
232+
unDelegateResourceContract.getBalance());
233+
break;
234+
case CancelAllUnfreezeV2Contract:
235+
CancelAllUnfreezeV2Contract cancelAllUnfreezeV2Contract = contractParameter
236+
.unpack(CancelAllUnfreezeV2Contract.class);
237+
238+
transactionLogTrigger.setFromAddress(StringUtil
239+
.encode58Check(cancelAllUnfreezeV2Contract.getOwnerAddress().toByteArray()));
240+
transactionLogTrigger.setAssetName("trx");
241+
transactionLogTrigger.setExtMap(transactionInfo.getCancelUnfreezeV2AmountMap());
242+
break;
159243
default:
160244
break;
161245
}
@@ -269,4 +353,5 @@ private List<InternalTransactionPojo> getInternalTransactionList(
269353
public void processTrigger() {
270354
EventPluginLoader.getInstance().postTransactionTrigger(transactionLogTrigger);
271355
}
356+
272357
}
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
package org.tron.common.logsfilter;
2+
3+
import static org.tron.core.config.Parameter.ChainConstant.TRX_PRECISION;
4+
5+
import com.google.protobuf.ByteString;
6+
import org.junit.Assert;
7+
import org.junit.Before;
8+
import org.junit.Test;
9+
import org.tron.common.logsfilter.capsule.TransactionLogTriggerCapsule;
10+
import org.tron.common.utils.Sha256Hash;
11+
import org.tron.core.capsule.BlockCapsule;
12+
import org.tron.core.capsule.TransactionCapsule;
13+
import org.tron.p2p.utils.ByteArray;
14+
import org.tron.protos.Protocol;
15+
import org.tron.protos.contract.BalanceContract;
16+
import org.tron.protos.contract.Common;
17+
18+
public class TransactionLogTriggerCapsuleTest {
19+
20+
private static final String OWNER_ADDRESS = "41548794500882809695a8a687866e76d4271a1abc";
21+
private static final String RECEIVER_ADDRESS = "41abd4b9367799eaa3197fecb144eb71de1e049150";
22+
23+
public TransactionCapsule transactionCapsule;
24+
public BlockCapsule blockCapsule;
25+
26+
@Before
27+
public void setup() {
28+
blockCapsule = new BlockCapsule(1, Sha256Hash.ZERO_HASH,
29+
System.currentTimeMillis(), Sha256Hash.ZERO_HASH.getByteString());
30+
}
31+
32+
@Test
33+
public void testConstructorWithUnfreezeBalanceTrxCapsule() {
34+
BalanceContract.UnfreezeBalanceContract.Builder builder2 =
35+
BalanceContract.UnfreezeBalanceContract.newBuilder()
36+
.setOwnerAddress(ByteString.copyFrom(ByteArray.fromHexString(OWNER_ADDRESS)))
37+
.setReceiverAddress(ByteString.copyFrom(ByteArray.fromHexString(RECEIVER_ADDRESS)));
38+
transactionCapsule = new TransactionCapsule(builder2.build(),
39+
Protocol.Transaction.Contract.ContractType.UnfreezeBalanceContract);
40+
41+
TransactionLogTriggerCapsule triggerCapsule =
42+
new TransactionLogTriggerCapsule(transactionCapsule, blockCapsule);
43+
44+
Assert.assertNotNull(triggerCapsule.getTransactionLogTrigger().getFromAddress());
45+
Assert.assertNotNull(triggerCapsule.getTransactionLogTrigger().getToAddress());
46+
}
47+
48+
49+
@Test
50+
public void testConstructorWithFreezeBalanceV2TrxCapsule() {
51+
BalanceContract.FreezeBalanceV2Contract.Builder builder2 =
52+
BalanceContract.FreezeBalanceV2Contract.newBuilder()
53+
.setOwnerAddress(ByteString.copyFrom(ByteArray.fromHexString(OWNER_ADDRESS)))
54+
.setFrozenBalance(TRX_PRECISION + 100000)
55+
.setResource(Common.ResourceCode.BANDWIDTH);
56+
transactionCapsule = new TransactionCapsule(builder2.build(),
57+
Protocol.Transaction.Contract.ContractType.FreezeBalanceV2Contract);
58+
59+
TransactionLogTriggerCapsule triggerCapsule =
60+
new TransactionLogTriggerCapsule(transactionCapsule, blockCapsule);
61+
62+
Assert.assertNotNull(triggerCapsule.getTransactionLogTrigger().getFromAddress());
63+
Assert.assertEquals("trx", triggerCapsule.getTransactionLogTrigger().getAssetName());
64+
Assert.assertEquals(TRX_PRECISION + 100000,
65+
triggerCapsule.getTransactionLogTrigger().getAssetAmount());
66+
}
67+
68+
@Test
69+
public void testConstructorWithUnfreezeBalanceV2TrxCapsule() {
70+
BalanceContract.UnfreezeBalanceV2Contract.Builder builder2 =
71+
BalanceContract.UnfreezeBalanceV2Contract.newBuilder()
72+
.setOwnerAddress(ByteString.copyFrom(ByteArray.fromHexString(OWNER_ADDRESS)))
73+
.setUnfreezeBalance(TRX_PRECISION + 4000)
74+
.setResource(Common.ResourceCode.BANDWIDTH);
75+
transactionCapsule = new TransactionCapsule(builder2.build(),
76+
Protocol.Transaction.Contract.ContractType.UnfreezeBalanceV2Contract);
77+
78+
TransactionLogTriggerCapsule triggerCapsule =
79+
new TransactionLogTriggerCapsule(transactionCapsule, blockCapsule);
80+
81+
Assert.assertNotNull(triggerCapsule.getTransactionLogTrigger().getFromAddress());
82+
Assert.assertEquals("trx", triggerCapsule.getTransactionLogTrigger().getAssetName());
83+
Assert.assertEquals(TRX_PRECISION + 4000,
84+
triggerCapsule.getTransactionLogTrigger().getAssetAmount());
85+
}
86+
87+
88+
@Test
89+
public void testConstructorWithWithdrawExpireTrxCapsule() {
90+
BalanceContract.WithdrawExpireUnfreezeContract.Builder builder2 =
91+
BalanceContract.WithdrawExpireUnfreezeContract.newBuilder()
92+
.setOwnerAddress(ByteString.copyFrom(ByteArray.fromHexString(OWNER_ADDRESS)));
93+
transactionCapsule = new TransactionCapsule(builder2.build(),
94+
Protocol.Transaction.Contract.ContractType.WithdrawExpireUnfreezeContract);
95+
96+
TransactionLogTriggerCapsule triggerCapsule =
97+
new TransactionLogTriggerCapsule(transactionCapsule, blockCapsule);
98+
99+
Assert.assertNotNull(triggerCapsule.getTransactionLogTrigger().getFromAddress());
100+
Assert.assertEquals("trx", triggerCapsule.getTransactionLogTrigger().getAssetName());
101+
Assert.assertEquals(0L, triggerCapsule.getTransactionLogTrigger().getAssetAmount());
102+
}
103+
104+
105+
@Test
106+
public void testConstructorWithDelegateResourceTrxCapsule() {
107+
BalanceContract.DelegateResourceContract.Builder builder2 =
108+
BalanceContract.DelegateResourceContract.newBuilder()
109+
.setOwnerAddress(ByteString.copyFrom(ByteArray.fromHexString(OWNER_ADDRESS)))
110+
.setReceiverAddress(ByteString.copyFrom(ByteArray.fromHexString(RECEIVER_ADDRESS)))
111+
.setBalance(TRX_PRECISION + 2000);
112+
transactionCapsule = new TransactionCapsule(builder2.build(),
113+
Protocol.Transaction.Contract.ContractType.DelegateResourceContract);
114+
115+
TransactionLogTriggerCapsule triggerCapsule =
116+
new TransactionLogTriggerCapsule(transactionCapsule, blockCapsule);
117+
118+
Assert.assertNotNull(triggerCapsule.getTransactionLogTrigger().getFromAddress());
119+
Assert.assertNotNull(triggerCapsule.getTransactionLogTrigger().getToAddress());
120+
Assert.assertEquals("trx", triggerCapsule.getTransactionLogTrigger().getAssetName());
121+
Assert.assertEquals(TRX_PRECISION + 2000,
122+
triggerCapsule.getTransactionLogTrigger().getAssetAmount());
123+
}
124+
125+
@Test
126+
public void testConstructorWithUnDelegateResourceTrxCapsule() {
127+
BalanceContract.UnDelegateResourceContract.Builder builder2 =
128+
BalanceContract.UnDelegateResourceContract.newBuilder()
129+
.setOwnerAddress(ByteString.copyFrom(ByteArray.fromHexString(OWNER_ADDRESS)))
130+
.setReceiverAddress(ByteString.copyFrom(ByteArray.fromHexString(RECEIVER_ADDRESS)))
131+
.setBalance(TRX_PRECISION + 10000);
132+
transactionCapsule = new TransactionCapsule(builder2.build(),
133+
Protocol.Transaction.Contract.ContractType.UnDelegateResourceContract);
134+
135+
TransactionLogTriggerCapsule triggerCapsule =
136+
new TransactionLogTriggerCapsule(transactionCapsule, blockCapsule);
137+
138+
Assert.assertNotNull(triggerCapsule.getTransactionLogTrigger().getFromAddress());
139+
Assert.assertNotNull(triggerCapsule.getTransactionLogTrigger().getToAddress());
140+
Assert.assertEquals("trx", triggerCapsule.getTransactionLogTrigger().getAssetName());
141+
Assert.assertEquals(TRX_PRECISION + 10000,
142+
triggerCapsule.getTransactionLogTrigger().getAssetAmount());
143+
}
144+
145+
@Test
146+
public void testConstructorWithCancelAllUnfreezeTrxCapsule() {
147+
BalanceContract.CancelAllUnfreezeV2Contract.Builder builder2 =
148+
BalanceContract.CancelAllUnfreezeV2Contract.newBuilder()
149+
.setOwnerAddress(ByteString.copyFrom(ByteArray.fromHexString(OWNER_ADDRESS)));
150+
transactionCapsule = new TransactionCapsule(builder2.build(),
151+
Protocol.Transaction.Contract.ContractType.CancelAllUnfreezeV2Contract);
152+
153+
TransactionLogTriggerCapsule triggerCapsule =
154+
new TransactionLogTriggerCapsule(transactionCapsule, blockCapsule);
155+
156+
Assert.assertNotNull(triggerCapsule.getTransactionLogTrigger().getFromAddress());
157+
}
158+
159+
}

0 commit comments

Comments
 (0)