Skip to content

Commit 85e9efd

Browse files
authored
Merge pull request #3620 from AElfProject/feature/inline-tx-id
Inline transactions can be cross-chain indexed to enable further business processing
2 parents 6ea81f8 + c84faaa commit 85e9efd

File tree

24 files changed

+356
-27
lines changed

24 files changed

+356
-27
lines changed

azure-pipelines.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ jobs:
4040
parts: 3
4141
n: 2
4242
codecoverage: true
43-
- template: templates/build-template-macos.yml
44-
parameters:
45-
parts: 3
46-
n: 3
47-
codecoverage: true
43+
# - template: templates/build-template-macos.yml
44+
# parameters:
45+
# parts: 3
46+
# n: 3
47+
# codecoverage: true
4848

contract/AElf.Contracts.Consensus.AEDPoS/AEDPoSContract_ProcessConsensusInformation.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,12 @@ private void ProcessNextRound(NextRoundInput input)
127127
{
128128
var minersCount = GetMinersCount(nextRound);
129129
if (minersCount != 0 && State.ElectionContract.Value != null)
130+
{
130131
State.ElectionContract.UpdateMinersCount.Send(new UpdateMinersCountInput
131132
{
132133
MinersCount = minersCount
133134
});
135+
}
134136
}
135137
}
136138

contract/AElf.Contracts.MultiToken/TokenContract_Helper.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,10 +215,16 @@ private Address ExtractTokenContractAddress(ByteString bytes)
215215
private void AssertCrossChainTransaction(Transaction originalTransaction, Address validAddress,
216216
params string[] validMethodNames)
217217
{
218-
var validateResult = validMethodNames.Contains(originalTransaction.MethodName)
218+
var validateResult = validMethodNames.Contains(MaybeRecoverInlineTransactionFunctionName(originalTransaction.MethodName))
219219
&& originalTransaction.To == validAddress;
220220
Assert(validateResult, "Invalid transaction.");
221221
}
222+
223+
private static string MaybeRecoverInlineTransactionFunctionName(string methodName)
224+
{
225+
var parts = methodName.Split('.');
226+
return parts.Length > 1 ? parts[^2] : methodName;
227+
}
222228

223229
private void RegisterTokenInfo(TokenInfo tokenInfo)
224230
{

global.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"sdk": {
3-
"version": "8.0.x"
3+
"version": "8.0.*"
44
}
55
}

protobuf/inline_transaction.proto

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
syntax = "proto3";
2+
3+
option csharp_namespace = "AElf.Types";
4+
5+
6+
import "aelf/core.proto";
7+
import "aelf/options.proto";
8+
9+
service InlineTransaction {
10+
}
11+
12+
message InlineTransactionCreated {
13+
option (aelf.is_event) = true;
14+
aelf.Transaction transaction = 1 [(aelf.is_indexed) = true];
15+
}

protobuf/test_virtual_address_contract.proto

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ service VirtualAddressContract {
1414
option (aelf.base) = "acs1.proto";
1515

1616
rpc VirtualAddressVote(VirtualAddressVoteInput) returns (google.protobuf.Empty);
17+
rpc VirtualAddressVoteWithInline(VirtualAddressVoteWithCountInput) returns (google.protobuf.Empty);
1718
rpc VirtualAddressWithdraw(aelf.Hash) returns (google.protobuf.Empty);
1819
rpc VirtualAddressChangeVotingOption(VirtualAddressChangeVotingOptionInput) returns (google.protobuf.Empty);
1920
rpc VirtualAddressClaimProfit(VirtualAddressClaimProfitInput) returns (google.protobuf.Empty);
@@ -32,6 +33,11 @@ message VirtualAddressVoteInput {
3233
aelf.Hash token = 4;
3334
}
3435

36+
message VirtualAddressVoteWithCountInput {
37+
VirtualAddressVoteInput vote_input = 1; // Existing input type
38+
int32 count = 2; // Additional count input
39+
}
40+
3541
message VirtualAddressChangeVotingOptionInput {
3642
bool is_reset = 1;
3743
aelf.Hash vote_id = 2;

protobuf/virtual_transaction.proto

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,4 @@ message VirtualTransactionCreated {
1717
string method_name = 4 [(aelf.is_indexed) = true];
1818
bytes params = 5;
1919
aelf.Address signatory = 6 [(aelf.is_indexed) = true];
20-
}
20+
}

src/AElf.ContractTestKit.AEDPoSExtension/UnitTestPlainTransactionExecutingService.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Threading;
33
using System.Threading.Tasks;
44
using AElf.Kernel;
5+
using AElf.Kernel.Blockchain.Application;
56
using AElf.Kernel.FeatureDisable.Core;
67
using AElf.Kernel.SmartContract;
78
using AElf.Kernel.SmartContract.Application;
@@ -13,8 +14,8 @@ public class UnitTestPlainTransactionExecutingService : PlainTransactionExecutin
1314
{
1415
public UnitTestPlainTransactionExecutingService(ISmartContractExecutiveService smartContractExecutiveService,
1516
IEnumerable<IPostExecutionPlugin> postPlugins, IEnumerable<IPreExecutionPlugin> prePlugins,
16-
ITransactionContextFactory transactionContextFactory, IFeatureDisableService featureDisableService) : base(
17-
smartContractExecutiveService, postPlugins, prePlugins, transactionContextFactory, featureDisableService)
17+
ITransactionContextFactory transactionContextFactory, IFeatureDisableService featureDisableService,IBlockchainService blockchainService) : base(
18+
smartContractExecutiveService, postPlugins, prePlugins, transactionContextFactory, featureDisableService,blockchainService)
1819
{
1920
}
2021

src/AElf.Kernel.Core/Extensions/TransactionExtensions.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ public static int Size(this Transaction transaction)
1616

1717
public static bool VerifySignature(this Transaction transaction)
1818
{
19+
if (transaction.IsInlineWithTransactionId())
20+
{
21+
return true;
22+
}
1923
if (!transaction.VerifyFields())
2024
return false;
2125

@@ -27,7 +31,16 @@ public static bool VerifySignature(this Transaction transaction)
2731

2832
public static bool VerifyExpiration(this Transaction transaction, long chainBranchBlockHeight)
2933
{
34+
if (transaction.IsInlineWithTransactionId())
35+
{
36+
return true;
37+
}
3038
return transaction.RefBlockNumber <= chainBranchBlockHeight &&
3139
transaction.GetExpiryBlockNumber() > chainBranchBlockHeight;
3240
}
41+
42+
public static bool IsInlineWithTransactionId(this Transaction transaction)
43+
{
44+
return transaction.MethodName.Contains(".");
45+
}
3346
}

src/AElf.Kernel.SmartContract/AElf.Kernel.SmartContract.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,8 @@
2222
<ContractMessage Include="..\..\protobuf\virtual_transaction.proto">
2323
<Link>Protobuf\Proto\virtual_transaction.proto</Link>
2424
</ContractMessage>
25+
<ContractMessage Include="..\..\protobuf\inline_transaction.proto">
26+
<Link>Protobuf\Proto\inline_transaction.proto</Link>
27+
</ContractMessage>
2528
</ItemGroup>
2629
</Project>

0 commit comments

Comments
 (0)