Skip to content

Commit 11f3a1d

Browse files
authored
update flow contract abi (#118)
* update flow contract abi * add submitter as args * keep submit event unchanged * set submitter * update batch default handle * update contract and fix test
1 parent 97f4744 commit 11f3a1d

File tree

21 files changed

+2889
-347
lines changed

21 files changed

+2889
-347
lines changed

cmd/upload.go

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,9 @@ func bindTransactionFlags(cmd *cobra.Command, args *transactionArgument) {
4040
type uploadArgument struct {
4141
transactionArgument
4242

43-
file string
44-
tags string
43+
file string
44+
tags string
45+
submitter string
4546

4647
node []string
4748
indexer string
@@ -71,6 +72,7 @@ func bindUploadFlags(cmd *cobra.Command, args *uploadArgument) {
7172
cmd.Flags().StringVar(&args.file, "file", "", "File name to upload")
7273
cmd.MarkFlagRequired("file")
7374
cmd.Flags().StringVar(&args.tags, "tags", "0x", "Tags of the file")
75+
cmd.Flags().StringVar(&args.submitter, "submitter", "", "Address to submit transaction from (optional, defaults to key owner)")
7476

7577
cmd.Flags().StringSliceVar(&args.node, "node", []string{}, "ZeroGStorage storage node URL")
7678
cmd.Flags().StringVar(&args.indexer, "indexer", "", "ZeroGStorage indexer URL")
@@ -127,6 +129,21 @@ func upload(*cobra.Command, []string) {
127129
w3client := blockchain.MustNewWeb3(uploadArgs.url, uploadArgs.key, providerOption)
128130
defer w3client.Close()
129131

132+
// Extract submitter address once from w3client, or use provided submitter if specified
133+
var submitter common.Address
134+
if uploadArgs.submitter != "" {
135+
submitter = common.HexToAddress(uploadArgs.submitter)
136+
if submitter == (common.Address{}) {
137+
logrus.Fatal("Invalid submitter address provided")
138+
}
139+
} else {
140+
sm, err := w3client.GetSignerManager()
141+
if err != nil {
142+
logrus.WithError(err).Fatal("Failed to get signer manager")
143+
}
144+
submitter = sm.List()[0].Address()
145+
}
146+
130147
var fee *big.Int
131148
if uploadArgs.fee > 0 {
132149
feeInA0GI := big.NewFloat(uploadArgs.fee)
@@ -146,6 +163,7 @@ func upload(*cobra.Command, []string) {
146163
maxGasPrice = big.NewInt(int64(uploadArgs.maxGasPrice))
147164
}
148165
opt := transfer.UploadOption{
166+
Submitter: submitter,
149167
Tags: hexutil.MustDecode(uploadArgs.tags),
150168
FinalityRequired: finalityRequired,
151169
TaskSize: uploadArgs.taskSize,

cmd/upload_dir.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
zg_common "github.com/0gfoundation/0g-storage-client/common"
77
"github.com/0gfoundation/0g-storage-client/common/blockchain"
88
"github.com/0gfoundation/0g-storage-client/transfer"
9+
"github.com/ethereum/go-ethereum/common"
910
"github.com/ethereum/go-ethereum/common/hexutil"
1011
"github.com/sirupsen/logrus"
1112
"github.com/spf13/cobra"
@@ -42,11 +43,27 @@ func uploadDir(*cobra.Command, []string) {
4243
w3client := blockchain.MustNewWeb3(uploadDirArgs.url, uploadDirArgs.key, providerOption)
4344
defer w3client.Close()
4445

46+
// Extract submitter address once from w3client, or use provided submitter if specified
47+
var submitter common.Address
48+
if uploadDirArgs.submitter != "" {
49+
submitter = common.HexToAddress(uploadDirArgs.submitter)
50+
if submitter == (common.Address{}) {
51+
logrus.Fatal("Invalid submitter address provided")
52+
}
53+
} else {
54+
sm, err := w3client.GetSignerManager()
55+
if err != nil {
56+
logrus.WithError(err).Fatal("Failed to get signer manager")
57+
}
58+
submitter = sm.List()[0].Address()
59+
}
60+
4561
finalityRequired := transfer.TransactionPacked
4662
if uploadDirArgs.finalityRequired {
4763
finalityRequired = transfer.FileFinalized
4864
}
4965
opt := transfer.UploadOption{
66+
Submitter: submitter,
5067
Tags: hexutil.MustDecode(uploadDirArgs.tags),
5168
FinalityRequired: finalityRequired,
5269
TaskSize: uploadDirArgs.taskSize,

contract/contract.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ func NewFlowContract(flowAddress common.Address, clientWithSigner *web3go.Client
5555
return &FlowContract{contract, flow, clientWithSigner}, nil
5656
}
5757

58+
func (f *FlowContract) GetSubmitterAddress() (common.Address, error) {
59+
sm, err := f.clientWithSigner.GetSignerManager()
60+
if err != nil {
61+
return common.Address{}, err
62+
}
63+
return sm.List()[0].Address(), nil
64+
}
65+
5866
func (f *FlowContract) GetNonce(ctx context.Context) (*big.Int, error) {
5967
sm, err := f.clientWithSigner.GetSignerManager()
6068
if err != nil {
@@ -99,25 +107,25 @@ func (f *FlowContract) GetMarketContract(ctx context.Context) (*Market, error) {
99107

100108
func (submission Submission) String() string {
101109
var heights []uint64
102-
for _, v := range submission.Nodes {
110+
for _, v := range submission.Data.Nodes {
103111
heights = append(heights, v.Height.Uint64())
104112
}
105113

106-
return fmt.Sprintf("{ Size: %v, Heights: %v }", submission.Length, heights)
114+
return fmt.Sprintf("{ Size: %v, Heights: %v }", submission.Data.Length, heights)
107115
}
108116

109117
func (submission Submission) Root() common.Hash {
110-
numNodes := len(submission.Nodes)
118+
numNodes := len(submission.Data.Nodes)
111119

112120
// should be never occur
113121
if numNodes == 0 {
114122
return common.Hash{}
115123
}
116124

117125
// calculate root in reverse order
118-
root := submission.Nodes[numNodes-1].Root
126+
root := submission.Data.Nodes[numNodes-1].Root
119127
for i := 1; i < numNodes; i++ {
120-
left := submission.Nodes[numNodes-1-i]
128+
left := submission.Data.Nodes[numNodes-1-i]
121129
root = crypto.Keccak256Hash(left.Root[:], root[:])
122130
}
123131

@@ -368,7 +376,7 @@ func TransactWithGasAdjustmentNoReceipt(
368376

369377
func (submission Submission) Fee(pricePerSector *big.Int) *big.Int {
370378
var sectors int64
371-
for _, node := range submission.Nodes {
379+
for _, node := range submission.Data.Nodes {
372380
sectors += 1 << node.Height.Int64()
373381
}
374382

contract/flow.go

Lines changed: 1477 additions & 73 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/flow.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/0gfoundation/0g-storage-client/common/parallel"
1010
"github.com/0gfoundation/0g-storage-client/contract"
1111
"github.com/0gfoundation/0g-storage-client/core/merkle"
12+
ethcommon "github.com/ethereum/go-ethereum/common"
1213
"github.com/sirupsen/logrus"
1314
)
1415

@@ -23,11 +24,15 @@ func NewFlow(data IterableData, tags []byte, opts ...common.LogOption) *Flow {
2324
return &Flow{data: data, tags: tags, logger: common.NewLogger(opts...)}
2425
}
2526

26-
func (flow *Flow) CreateSubmission() (*contract.Submission, error) {
27+
func (flow *Flow) CreateSubmission(submitter ethcommon.Address) (*contract.Submission, error) {
2728
// TODO(kevin): limit file size, e.g., 2^31
2829
submission := contract.Submission{
29-
Length: big.NewInt(flow.data.Size()),
30-
Tags: flow.tags,
30+
Data: contract.SubmissionData{
31+
Length: big.NewInt(flow.data.Size()),
32+
Tags: flow.tags,
33+
Nodes: make([]contract.SubmissionNode, 0),
34+
},
35+
Submitter: submitter,
3136
}
3237

3338
var offset int64
@@ -36,7 +41,7 @@ func (flow *Flow) CreateSubmission() (*contract.Submission, error) {
3641
if err != nil {
3742
return nil, err
3843
}
39-
submission.Nodes = append(submission.Nodes, *node)
44+
submission.Data.Nodes = append(submission.Data.Nodes, *node)
4045
offset += chunks * DefaultChunkSize
4146
}
4247

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
bea58429e436e4952ae69235d9079cfc4ac5f3b3
1+
745c176bd206a37072281ec11aaf4f8ef6d4f6d3

0 commit comments

Comments
 (0)