Skip to content

Commit 09c27dc

Browse files
authored
chore: upgrade to v1 server api (#53)
This is utilizing non finalized protos, merge main before merging
1 parent b43daa1 commit 09c27dc

File tree

10 files changed

+77
-2010
lines changed

10 files changed

+77
-2010
lines changed

cmd/geth/config.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,11 +206,11 @@ func makeFullNode(ctx *cli.Context) *node.Node {
206206

207207
// Configure gRPC if requested.
208208
if ctx.IsSet(utils.GRPCEnabledFlag.Name) {
209-
serviceV1a2, err := execution.NewExecutionServiceServerV1Alpha2(eth)
209+
serviceV1, err := execution.NewExecutionServiceServerV1(eth)
210210
if err != nil {
211211
utils.Fatalf("failed to create execution service: %v", err)
212212
}
213-
utils.RegisterGRPCExecutionService(stack, serviceV1a2, &cfg.Node)
213+
utils.RegisterGRPCExecutionService(stack, serviceV1, &cfg.Node)
214214
}
215215

216216
// Add the Ethereum Stats daemon if requested.

cmd/utils/flags.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import (
3535
"strings"
3636
"time"
3737

38-
astriaGrpc "buf.build/gen/go/astria/execution-apis/grpc/go/astria/execution/v1alpha2/executionv1alpha2grpc"
38+
astriaGrpc "buf.build/gen/go/astria/execution-apis/grpc/go/astria/execution/v1/executionv1grpc"
3939
"github.com/ethereum/go-ethereum/accounts"
4040
"github.com/ethereum/go-ethereum/accounts/keystore"
4141
bparams "github.com/ethereum/go-ethereum/beacon/params"

go.mod

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ module github.com/ethereum/go-ethereum
33
go 1.21
44

55
require (
6-
buf.build/gen/go/astria/execution-apis/grpc/go v1.4.0-20240725205400-4746841755df.1
7-
buf.build/gen/go/astria/execution-apis/protocolbuffers/go v1.34.1-20240725205400-4746841755df.1
8-
buf.build/gen/go/astria/primitives/protocolbuffers/go v1.34.2-20240911152449-eeebd3decdce.2
9-
buf.build/gen/go/astria/sequencerblock-apis/protocolbuffers/go v1.34.2-20240911152449-b41cca615e35.2
6+
buf.build/gen/go/astria/execution-apis/grpc/go v1.5.1-20241017141511-7e4bcc0ebba5.1
7+
buf.build/gen/go/astria/execution-apis/protocolbuffers/go v1.35.1-20241017141511-7e4bcc0ebba5.1
8+
buf.build/gen/go/astria/primitives/protocolbuffers/go v1.35.1-20240911152449-eeebd3decdce.1
9+
buf.build/gen/go/astria/sequencerblock-apis/protocolbuffers/go v1.35.1-20241017141511-71aab1871615.1
1010
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0
1111
github.com/Microsoft/go-winio v0.6.1
1212
github.com/VictoriaMetrics/fastcache v1.12.1
@@ -79,16 +79,12 @@ require (
7979
golang.org/x/time v0.5.0
8080
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d
8181
google.golang.org/grpc v1.64.1
82-
google.golang.org/protobuf v1.34.2
82+
google.golang.org/protobuf v1.35.1
8383
gopkg.in/natefinch/lumberjack.v2 v2.0.0
8484
gopkg.in/yaml.v3 v3.0.1
8585
)
8686

8787
require (
88-
buf.build/gen/go/astria/primitives/grpc/go v1.5.1-20240911152449-eeebd3decdce.1 // indirect
89-
buf.build/gen/go/astria/protocol-apis/grpc/go v1.3.0-20240829200558-cd9207200425.3 // indirect
90-
buf.build/gen/go/astria/protocol-apis/protocolbuffers/go v1.34.1-20240829200558-cd9207200425.1 // indirect
91-
buf.build/gen/go/astria/sequencerblock-apis/grpc/go v1.5.1-20240911152449-b41cca615e35.1 // indirect
9288
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 // indirect
9389
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect
9490
github.com/DataDog/zstd v1.4.5 // indirect
@@ -154,6 +150,7 @@ require (
154150
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect
155151
golang.org/x/mod v0.17.0 // indirect
156152
golang.org/x/net v0.26.0 // indirect
153+
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
157154
google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect
158155
google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect
159156
gopkg.in/yaml.v2 v2.4.0 // indirect

go.sum

Lines changed: 10 additions & 1940 deletions
Large diffs are not rendered by default.

grpc/execution/server.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import (
1313
"sync"
1414
"time"
1515

16-
astriaGrpc "buf.build/gen/go/astria/execution-apis/grpc/go/astria/execution/v1alpha2/executionv1alpha2grpc"
17-
astriaPb "buf.build/gen/go/astria/execution-apis/protocolbuffers/go/astria/execution/v1alpha2"
16+
astriaGrpc "buf.build/gen/go/astria/execution-apis/grpc/go/astria/execution/v1/executionv1grpc"
17+
astriaPb "buf.build/gen/go/astria/execution-apis/protocolbuffers/go/astria/execution/v1"
1818
primitivev1 "buf.build/gen/go/astria/primitives/protocolbuffers/go/astria/primitive/v1"
1919
"github.com/ethereum/go-ethereum/beacon/engine"
2020
"github.com/ethereum/go-ethereum/common"
@@ -30,9 +30,9 @@ import (
3030
"google.golang.org/protobuf/types/known/timestamppb"
3131
)
3232

33-
// ExecutionServiceServerV1Alpha2 is the implementation of the
33+
// ExecutionServiceServerV1 is the implementation of the
3434
// ExecutionServiceServer interface.
35-
type ExecutionServiceServerV1Alpha2 struct {
35+
type ExecutionServiceServerV1 struct {
3636
// NOTE - from the generated code: All implementations must embed
3737
// UnimplementedExecutionServiceServer for forward compatibility
3838
astriaGrpc.UnimplementedExecutionServiceServer
@@ -74,7 +74,7 @@ var (
7474
commitmentStateUpdateTimer = metrics.GetOrRegisterTimer("astria/execution/commitment", nil)
7575
)
7676

77-
func NewExecutionServiceServerV1Alpha2(eth *eth.Ethereum) (*ExecutionServiceServerV1Alpha2, error) {
77+
func NewExecutionServiceServerV1(eth *eth.Ethereum) (*ExecutionServiceServerV1, error) {
7878
bc := eth.BlockChain()
7979

8080
if bc.Config().AstriaRollupName == "" {
@@ -143,7 +143,7 @@ func NewExecutionServiceServerV1Alpha2(eth *eth.Ethereum) (*ExecutionServiceServ
143143
}
144144
}
145145

146-
return &ExecutionServiceServerV1Alpha2{
146+
return &ExecutionServiceServerV1{
147147
eth: eth,
148148
bc: bc,
149149
bridgeAddresses: bridgeAddresses,
@@ -152,7 +152,7 @@ func NewExecutionServiceServerV1Alpha2(eth *eth.Ethereum) (*ExecutionServiceServ
152152
}, nil
153153
}
154154

155-
func (s *ExecutionServiceServerV1Alpha2) GetGenesisInfo(ctx context.Context, req *astriaPb.GetGenesisInfoRequest) (*astriaPb.GenesisInfo, error) {
155+
func (s *ExecutionServiceServerV1) GetGenesisInfo(ctx context.Context, req *astriaPb.GetGenesisInfoRequest) (*astriaPb.GenesisInfo, error) {
156156
log.Debug("GetGenesisInfo called")
157157
getGenesisInfoRequestCount.Inc(1)
158158

@@ -172,7 +172,7 @@ func (s *ExecutionServiceServerV1Alpha2) GetGenesisInfo(ctx context.Context, req
172172
}
173173

174174
// GetBlock will return a block given an identifier.
175-
func (s *ExecutionServiceServerV1Alpha2) GetBlock(ctx context.Context, req *astriaPb.GetBlockRequest) (*astriaPb.Block, error) {
175+
func (s *ExecutionServiceServerV1) GetBlock(ctx context.Context, req *astriaPb.GetBlockRequest) (*astriaPb.Block, error) {
176176
if req.GetIdentifier() == nil {
177177
return nil, status.Error(codes.InvalidArgument, "identifier cannot be empty")
178178
}
@@ -193,7 +193,7 @@ func (s *ExecutionServiceServerV1Alpha2) GetBlock(ctx context.Context, req *astr
193193

194194
// BatchGetBlocks will return an array of Blocks given an array of block
195195
// identifiers.
196-
func (s *ExecutionServiceServerV1Alpha2) BatchGetBlocks(ctx context.Context, req *astriaPb.BatchGetBlocksRequest) (*astriaPb.BatchGetBlocksResponse, error) {
196+
func (s *ExecutionServiceServerV1) BatchGetBlocks(ctx context.Context, req *astriaPb.BatchGetBlocksRequest) (*astriaPb.BatchGetBlocksResponse, error) {
197197
if req.Identifiers == nil || len(req.Identifiers) == 0 {
198198
return nil, status.Error(codes.InvalidArgument, "identifiers cannot be empty")
199199
}
@@ -232,7 +232,7 @@ func protoU128ToBigInt(u128 *primitivev1.Uint128) *big.Int {
232232

233233
// ExecuteBlock drives deterministic derivation of a rollup block from sequencer
234234
// block data
235-
func (s *ExecutionServiceServerV1Alpha2) ExecuteBlock(ctx context.Context, req *astriaPb.ExecuteBlockRequest) (*astriaPb.Block, error) {
235+
func (s *ExecutionServiceServerV1) ExecuteBlock(ctx context.Context, req *astriaPb.ExecuteBlockRequest) (*astriaPb.Block, error) {
236236
if err := validateStaticExecuteBlockRequest(req); err != nil {
237237
log.Error("ExecuteBlock called with invalid ExecuteBlockRequest", "err", err)
238238
return nil, status.Error(codes.InvalidArgument, "ExecuteBlockRequest is invalid")
@@ -323,7 +323,7 @@ func (s *ExecutionServiceServerV1Alpha2) ExecuteBlock(ctx context.Context, req *
323323
}
324324

325325
// GetCommitmentState fetches the current CommitmentState of the chain.
326-
func (s *ExecutionServiceServerV1Alpha2) GetCommitmentState(ctx context.Context, req *astriaPb.GetCommitmentStateRequest) (*astriaPb.CommitmentState, error) {
326+
func (s *ExecutionServiceServerV1) GetCommitmentState(ctx context.Context, req *astriaPb.GetCommitmentStateRequest) (*astriaPb.CommitmentState, error) {
327327
log.Info("GetCommitmentState called")
328328
getCommitmentStateRequestCount.Inc(1)
329329

@@ -354,7 +354,7 @@ func (s *ExecutionServiceServerV1Alpha2) GetCommitmentState(ctx context.Context,
354354

355355
// UpdateCommitmentState replaces the whole CommitmentState with a new
356356
// CommitmentState.
357-
func (s *ExecutionServiceServerV1Alpha2) UpdateCommitmentState(ctx context.Context, req *astriaPb.UpdateCommitmentStateRequest) (*astriaPb.CommitmentState, error) {
357+
func (s *ExecutionServiceServerV1) UpdateCommitmentState(ctx context.Context, req *astriaPb.UpdateCommitmentStateRequest) (*astriaPb.CommitmentState, error) {
358358
if err := validateStaticCommitmentState(req.CommitmentState); err != nil {
359359
log.Error("UpdateCommitmentState called with invalid CommitmentState", "err", err)
360360
return nil, status.Error(codes.InvalidArgument, "CommitmentState is invalid")
@@ -434,7 +434,7 @@ func (s *ExecutionServiceServerV1Alpha2) UpdateCommitmentState(ctx context.Conte
434434
return req.CommitmentState, nil
435435
}
436436

437-
func (s *ExecutionServiceServerV1Alpha2) getBlockFromIdentifier(identifier *astriaPb.BlockIdentifier) (*astriaPb.Block, error) {
437+
func (s *ExecutionServiceServerV1) getBlockFromIdentifier(identifier *astriaPb.BlockIdentifier) (*astriaPb.Block, error) {
438438
var header *types.Header
439439

440440
// Grab the header based on the identifier provided
@@ -475,6 +475,6 @@ func ethHeaderToExecutionBlock(header *types.Header) (*astriaPb.Block, error) {
475475
}, nil
476476
}
477477

478-
func (s *ExecutionServiceServerV1Alpha2) syncMethodsCalled() bool {
478+
func (s *ExecutionServiceServerV1) syncMethodsCalled() bool {
479479
return s.genesisInfoCalled && s.getCommitmentStateCalled
480480
}

grpc/execution/server_test.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package execution
22

33
import (
4-
astriaPb "buf.build/gen/go/astria/execution-apis/protocolbuffers/go/astria/execution/v1alpha2"
4+
astriaPb "buf.build/gen/go/astria/execution-apis/protocolbuffers/go/astria/execution/v1"
55
primitivev1 "buf.build/gen/go/astria/primitives/protocolbuffers/go/astria/primitive/v1"
6-
sequencerblockv1alpha1 "buf.build/gen/go/astria/sequencerblock-apis/protocolbuffers/go/astria/sequencerblock/v1alpha1"
6+
sequencerblockv1 "buf.build/gen/go/astria/sequencerblock-apis/protocolbuffers/go/astria/sequencerblock/v1"
77
"bytes"
88
"context"
99
"crypto/sha256"
@@ -269,7 +269,7 @@ func TestExecutionServiceServerV1Alpha2_ExecuteBlock(t *testing.T) {
269269
// create the txs to send
270270
// create 5 txs
271271
txs := []*types.Transaction{}
272-
marshalledTxs := []*sequencerblockv1alpha1.RollupData{}
272+
marshalledTxs := []*sequencerblockv1.RollupData{}
273273
for i := 0; i < 5; i++ {
274274
unsignedTx := types.NewTransaction(uint64(i), testToAddress, big.NewInt(1), params.TxGas, big.NewInt(params.InitialBaseFee*2), nil)
275275
tx, err := types.SignTx(unsignedTx, types.LatestSigner(ethservice.BlockChain().Config()), testKey)
@@ -278,8 +278,8 @@ func TestExecutionServiceServerV1Alpha2_ExecuteBlock(t *testing.T) {
278278

279279
marshalledTx, err := tx.MarshalBinary()
280280
require.Nil(t, err, "Failed to marshal tx")
281-
marshalledTxs = append(marshalledTxs, &sequencerblockv1alpha1.RollupData{
282-
Value: &sequencerblockv1alpha1.RollupData_SequencedData{SequencedData: marshalledTx},
281+
marshalledTxs = append(marshalledTxs, &sequencerblockv1.RollupData{
282+
Value: &sequencerblockv1.RollupData_SequencedData{SequencedData: marshalledTx},
283283
})
284284
}
285285

@@ -295,7 +295,7 @@ func TestExecutionServiceServerV1Alpha2_ExecuteBlock(t *testing.T) {
295295

296296
chainDestinationAddress := crypto.PubkeyToAddress(chainDestinationAddressPrivKey.PublicKey)
297297

298-
depositTx := &sequencerblockv1alpha1.RollupData{Value: &sequencerblockv1alpha1.RollupData_Deposit{Deposit: &sequencerblockv1alpha1.Deposit{
298+
depositTx := &sequencerblockv1.RollupData{Value: &sequencerblockv1.RollupData_Deposit{Deposit: &sequencerblockv1.Deposit{
299299
BridgeAddress: &primitivev1.Address{
300300
Bech32M: bridgeAddress,
301301
},
@@ -361,7 +361,7 @@ func TestExecutionServiceServerV1Alpha2_ExecuteBlockAndUpdateCommitment(t *testi
361361

362362
// create 5 txs
363363
txs := []*types.Transaction{}
364-
marshalledTxs := []*sequencerblockv1alpha1.RollupData{}
364+
marshalledTxs := []*sequencerblockv1.RollupData{}
365365
for i := 0; i < 5; i++ {
366366
unsignedTx := types.NewTransaction(uint64(i), testToAddress, big.NewInt(1), params.TxGas, big.NewInt(params.InitialBaseFee*2), nil)
367367
tx, err := types.SignTx(unsignedTx, types.LatestSigner(ethservice.BlockChain().Config()), testKey)
@@ -370,8 +370,8 @@ func TestExecutionServiceServerV1Alpha2_ExecuteBlockAndUpdateCommitment(t *testi
370370

371371
marshalledTx, err := tx.MarshalBinary()
372372
require.Nil(t, err, "Failed to marshal tx")
373-
marshalledTxs = append(marshalledTxs, &sequencerblockv1alpha1.RollupData{
374-
Value: &sequencerblockv1alpha1.RollupData_SequencedData{SequencedData: marshalledTx},
373+
marshalledTxs = append(marshalledTxs, &sequencerblockv1.RollupData{
374+
Value: &sequencerblockv1.RollupData_SequencedData{SequencedData: marshalledTx},
375375
})
376376
}
377377

@@ -392,7 +392,7 @@ func TestExecutionServiceServerV1Alpha2_ExecuteBlockAndUpdateCommitment(t *testi
392392

393393
chainDestinationAddressBalanceBefore := stateDb.GetBalance(chainDestinationAddress)
394394

395-
depositTx := &sequencerblockv1alpha1.RollupData{Value: &sequencerblockv1alpha1.RollupData_Deposit{Deposit: &sequencerblockv1alpha1.Deposit{
395+
depositTx := &sequencerblockv1.RollupData{Value: &sequencerblockv1.RollupData_Deposit{Deposit: &sequencerblockv1.Deposit{
396396
BridgeAddress: &primitivev1.Address{
397397
Bech32M: bridgeAddress,
398398
},
@@ -506,7 +506,7 @@ func TestExecutionServiceServerV1Alpha2_ExecuteBlockAndUpdateCommitmentWithInval
506506

507507
// create 5 txs
508508
txs := []*types.Transaction{}
509-
marshalledTxs := []*sequencerblockv1alpha1.RollupData{}
509+
marshalledTxs := []*sequencerblockv1.RollupData{}
510510
for i := 0; i < 5; i++ {
511511
unsignedTx := types.NewTransaction(latestNonce+uint64(i), testToAddress, big.NewInt(1), params.TxGas, big.NewInt(params.InitialBaseFee*2), nil)
512512
tx, err := types.SignTx(unsignedTx, types.LatestSigner(ethservice.BlockChain().Config()), testKey)
@@ -515,8 +515,8 @@ func TestExecutionServiceServerV1Alpha2_ExecuteBlockAndUpdateCommitmentWithInval
515515

516516
marshalledTx, err := tx.MarshalBinary()
517517
require.Nil(t, err, "Failed to marshal tx")
518-
marshalledTxs = append(marshalledTxs, &sequencerblockv1alpha1.RollupData{
519-
Value: &sequencerblockv1alpha1.RollupData_SequencedData{SequencedData: marshalledTx},
518+
marshalledTxs = append(marshalledTxs, &sequencerblockv1.RollupData{
519+
Value: &sequencerblockv1.RollupData_SequencedData{SequencedData: marshalledTx},
520520
})
521521
}
522522

@@ -528,8 +528,8 @@ func TestExecutionServiceServerV1Alpha2_ExecuteBlockAndUpdateCommitmentWithInval
528528

529529
marshalledTx, err := tx.MarshalBinary()
530530
require.Nil(t, err, "Failed to marshal tx")
531-
marshalledTxs = append(marshalledTxs, &sequencerblockv1alpha1.RollupData{
532-
Value: &sequencerblockv1alpha1.RollupData_SequencedData{SequencedData: marshalledTx},
531+
marshalledTxs = append(marshalledTxs, &sequencerblockv1.RollupData{
532+
Value: &sequencerblockv1.RollupData_SequencedData{SequencedData: marshalledTx},
533533
})
534534

535535
errors := ethservice.TxPool().Add(txs, true, false)

grpc/execution/test_utils.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,12 @@ func startEthService(t *testing.T, genesis *core.Genesis) *eth.Ethereum {
130130
return ethservice
131131
}
132132

133-
func setupExecutionService(t *testing.T, noOfBlocksToGenerate int) (*eth.Ethereum, *ExecutionServiceServerV1Alpha2) {
133+
func setupExecutionService(t *testing.T, noOfBlocksToGenerate int) (*eth.Ethereum, *ExecutionServiceServerV1) {
134134
t.Helper()
135135
genesis, blocks, bridgeAddress, feeCollectorKey := generateMergeChain(noOfBlocksToGenerate, true)
136136
ethservice := startEthService(t, genesis)
137137

138-
serviceV1Alpha1, err := NewExecutionServiceServerV1Alpha2(ethservice)
138+
serviceV1Alpha1, err := NewExecutionServiceServerV1(ethservice)
139139
require.Nil(t, err, "can't create execution service")
140140

141141
feeCollector := crypto.PubkeyToAddress(feeCollectorKey.PublicKey)

grpc/execution/validation.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import (
55
"fmt"
66
"math/big"
77

8-
astriaPb "buf.build/gen/go/astria/execution-apis/protocolbuffers/go/astria/execution/v1alpha2"
9-
sequencerblockv1alpha1 "buf.build/gen/go/astria/sequencerblock-apis/protocolbuffers/go/astria/sequencerblock/v1alpha1"
8+
astriaPb "buf.build/gen/go/astria/execution-apis/protocolbuffers/go/astria/execution/v1"
9+
sequencerblockv1 "buf.build/gen/go/astria/sequencerblock-apis/protocolbuffers/go/astria/sequencerblock/v1"
1010
"github.com/ethereum/go-ethereum/common"
1111
"github.com/ethereum/go-ethereum/contracts"
1212
"github.com/ethereum/go-ethereum/core/types"
@@ -20,7 +20,7 @@ import (
2020
// tx is not a blob tx or a deposit tx.
2121
func validateAndUnmarshalSequencerTx(
2222
height uint64,
23-
tx *sequencerblockv1alpha1.RollupData,
23+
tx *sequencerblockv1.RollupData,
2424
bridgeAddresses map[string]*params.AstriaBridgeAddressConfig,
2525
bridgeAllowedAssets map[string]struct{},
2626
) (*types.Transaction, error) {
@@ -68,10 +68,10 @@ func validateAndUnmarshalSequencerTx(
6868
//
6969
// the fees are spent from the "bridge account" which is not actually a real account, but is instead some
7070
// address defined by consensus, so the gas cost is not actually deducted from any account.
71-
Gas: 64000,
72-
To: &bac.Erc20Asset.ContractAddress,
73-
Data: calldata,
74-
SourceTransactionId: *deposit.SourceTransactionId,
71+
Gas: 64000,
72+
To: &bac.Erc20Asset.ContractAddress,
73+
Data: calldata,
74+
SourceTransactionId: *deposit.SourceTransactionId,
7575
SourceTransactionIndex: deposit.SourceActionIndex,
7676
}
7777

@@ -80,11 +80,11 @@ func validateAndUnmarshalSequencerTx(
8080
}
8181

8282
txdata := types.DepositTx{
83-
From: bac.SenderAddress,
84-
To: &recipient,
85-
Value: amount,
86-
Gas: 0,
87-
SourceTransactionId: *deposit.SourceTransactionId,
83+
From: bac.SenderAddress,
84+
To: &recipient,
85+
Value: amount,
86+
Gas: 0,
87+
SourceTransactionId: *deposit.SourceTransactionId,
8888
SourceTransactionIndex: deposit.SourceActionIndex,
8989
}
9090
return types.NewTx(&txdata), nil

0 commit comments

Comments
 (0)