From c5a9a4a2406e71b83385e172c3f828ec45015fa4 Mon Sep 17 00:00:00 2001 From: thomas-senechal Date: Tue, 23 Jul 2024 20:36:50 +0200 Subject: [PATCH 01/10] Rename chunk package to website and add ComputeChunkCost function --- pkg/website/chunk.go | 34 +++++++++++++++++++++++++++++++++- pkg/website/chunk_test.go | 2 +- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/pkg/website/chunk.go b/pkg/website/chunk.go index 113d066..468fbdc 100644 --- a/pkg/website/chunk.go +++ b/pkg/website/chunk.go @@ -1,4 +1,11 @@ -package chunk +package website + +import ( + "fmt" + + "github.com/massalabs/station/pkg/convert" + "github.com/massalabs/station/pkg/node/sendoperation" +) func DivideIntoChunks(data []byte, chunkSize int) [][]byte { if data == nil || chunkSize <= 0 { @@ -18,3 +25,28 @@ func DivideIntoChunks(data []byte, chunkSize int) [][]byte { return chunks } + +// ComputeChunkCost computes the cost of uploading a chunk to a website. +// The cost is computed based on the size of the chunk and the index of the chunk. +// The cost of the first chunk includes the cost of nbChunk key creation. +// +// TODO: This function should be updated to avoid sending coins for chunks that do not require it. +// - chunk X in storage has chunkSize bytes, so we should not send coins for it. +// - chunk X in storage has 30% of chunkSize bytes, so we should only the missing 70% of chunkSize bytes in coins. +func ComputeChunkCost(chunkIndex int, chunkSize int) (int, error) { + uploadCost, err := sendoperation.StorageCostForEntry(convert.BytesPerUint32, chunkSize) + if err != nil { + return 0, fmt.Errorf("unable to compute storage cost for chunk upload: %w", err) + } + + if chunkIndex == 0 { + chunkKeyCost, err := sendoperation.StorageCostForEntry(len([]byte(nbChunkKey)), convert.BytesPerUint32) + if err != nil { + return 0, fmt.Errorf("unable to compute storage cost for nbChunk key creation: %w", err) + } + + uploadCost += chunkKeyCost + } + + return uploadCost, nil +} diff --git a/pkg/website/chunk_test.go b/pkg/website/chunk_test.go index c9f39b9..00a1745 100644 --- a/pkg/website/chunk_test.go +++ b/pkg/website/chunk_test.go @@ -1,4 +1,4 @@ -package chunk +package website import ( "testing" From 811c3ac41f55b9c4d0170a21823a1d60cc59c694 Mon Sep 17 00:00:00 2001 From: thomas-senechal Date: Tue, 23 Jul 2024 20:37:08 +0200 Subject: [PATCH 02/10] Update Taskfile.yml with gofumpt, gci, and golangci-lint commands --- Taskfile.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Taskfile.yml b/Taskfile.yml index ca46602..b6532f0 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -78,5 +78,7 @@ tasks: fmt: cmds: - - cmd: go fmt ./... - cmd: go mod tidy + - cmd: gofumpt -l -w . + - cmd: gci write . + - cmd: golangci-lint run --fix From 2b9f3fd82fa1275ae48ef438942b49547b941567 Mon Sep 17 00:00:00 2001 From: thomas-senechal Date: Tue, 23 Jul 2024 20:38:07 +0200 Subject: [PATCH 03/10] Add a basic Config struct in int/config to handle Wallet, MinimalFees and network --- int/config/config.go | 116 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 int/config/config.go diff --git a/int/config/config.go b/int/config/config.go new file mode 100644 index 0000000..2eaeab3 --- /dev/null +++ b/int/config/config.go @@ -0,0 +1,116 @@ +package config + +import ( + "github.com/massalabs/station-massa-wallet/pkg/utils" + msConfig "github.com/massalabs/station/int/config" + "github.com/massalabs/station/pkg/logger" + "github.com/massalabs/station/pkg/node" +) + +const ( + defaultMinimalFees = uint64(100_000_000) + defaultMaxGas = uint64(4_000_000_000) + defaultMaxCoins = uint64(10_000_000_000) + defaultExpiry = uint64(3) + + mainnetName = "mainnet" + buildnetName = "buildnet" + + MainnetChainID = 77658377 + BuildnetChainID = 77658366 +) + +type Config struct { + WalletNickname string + MinimalFees uint64 + MaxGas uint64 + MaxCoins uint64 + Expiry uint64 + NetworkInfos msConfig.NetworkInfos +} + +// DefaultConfig returns a new Config with default values. +func DefaultConfig(walletNickname string, nodeURL string) *Config { + return NewConfig(walletNickname, defaultMaxGas, defaultMaxCoins, defaultExpiry, nodeURL) +} + +// NewConfig returns a new Config with information returned by the given node. +func NewConfig(walletNickname string, maxGas, maxCoins, expiry uint64, nodeURL string) *Config { + client := node.NewClient(nodeURL) + + minimalFees := defaultMinimalFees + chainID := uint64(0) + networkName := "unknown" + nodeVersion := "unknown" + + status, err := node.Status(client) + if err != nil { + logger.Errorf("unable to get node status: %v", err) + logger.Warnf("Using default values for minimal fees, chain ID, and network version") + } else { + minimalFees = getMinimalFees(status) + chainID, networkName = getChainIDAndNetworkName(status) + nodeVersion = getNodeVersion(status) + } + + return &Config{ + WalletNickname: walletNickname, + MinimalFees: minimalFees, + MaxGas: maxGas, + MaxCoins: maxCoins, + Expiry: expiry, + NetworkInfos: msConfig.NetworkInfos{ + Network: networkName, + NodeURL: nodeURL, + Version: nodeVersion, + ChainID: chainID, + }, + } +} + +func getNodeVersion(status *node.State) string { + nodeVersion := "unknown" + + if status.Version != nil { + nodeVersion = *status.Version + } else { + logger.Warnf("Node version is nil, setting '%s' as network version", nodeVersion) + } + + return nodeVersion +} + +func getChainIDAndNetworkName(status *node.State) (uint64, string) { + chainID := uint64(0) + networkName := "unknown" + + if status.ChainID != nil { + chainID = uint64(*status.ChainID) + switch chainID { + case MainnetChainID: + networkName = mainnetName + case BuildnetChainID: + networkName = buildnetName + default: + logger.Warnf("Unknown chain ID: %d", chainID) + } + } + + return chainID, networkName +} + +func getMinimalFees(status *node.State) uint64 { + minimalFees := defaultMinimalFees + + if status.MinimalFees != nil { + statusMinimalFees, err := utils.MasToNano(*status.MinimalFees) + if err != nil { + logger.Errorf("unable to convert minimal fees: %v", err) + logger.Warnf("Using default value of %dnMAS for minimal fees", minimalFees) + } else { + minimalFees = statusMinimalFees + } + } + + return minimalFees +} From 90571677d9a358935381c29424a73703fb9b2a75 Mon Sep 17 00:00:00 2001 From: thomas-senechal Date: Tue, 23 Jul 2024 20:40:35 +0200 Subject: [PATCH 04/10] Add website Deploy func to deploy the websiteStorer SC --- pkg/website/deploy.go | 48 ++++++++++++++++++++++++++++ pkg/website/sc/websiteDeployer.wasm | Bin 0 -> 30262 bytes 2 files changed, 48 insertions(+) create mode 100644 pkg/website/deploy.go create mode 100644 pkg/website/sc/websiteDeployer.wasm diff --git a/pkg/website/deploy.go b/pkg/website/deploy.go new file mode 100644 index 0000000..29c5423 --- /dev/null +++ b/pkg/website/deploy.go @@ -0,0 +1,48 @@ +package website + +import ( + _ "embed" + "fmt" + + "github.com/massalabs/DeWeb/int/config" + "github.com/massalabs/station/pkg/node/sendoperation" + "github.com/massalabs/station/pkg/node/sendoperation/signer" + "github.com/massalabs/station/pkg/onchain" +) + +//go:embed sc/websiteDeployer.wasm +var sc []byte + +type DeploymentResult struct { + Address string + OperationID string +} + +func Deploy(config *config.Config) (*DeploymentResult, error) { + res, evt, err := onchain.DeploySC( + &config.NetworkInfos, + config.WalletNickname, + config.MaxGas, + config.MaxCoins, + config.MinimalFees, + config.Expiry, + sc, + nil, + sendoperation.OperationBatch{}, + &signer.WalletPlugin{}, + "Deploying website contract", + ) + if err != nil { + return nil, fmt.Errorf("deploying website contract: %w", err) + } + + address, found := onchain.FindDeployedAddress(evt) + if !found { + return nil, fmt.Errorf("deployed contract address not found") + } + + return &DeploymentResult{ + Address: address, + OperationID: res.OperationID, + }, nil +} diff --git a/pkg/website/sc/websiteDeployer.wasm b/pkg/website/sc/websiteDeployer.wasm new file mode 100644 index 0000000000000000000000000000000000000000..fd613a938c714d7b25d68783ac3ed26c74a45ee6 GIT binary patch literal 30262 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 CW@wiH literal 0 HcmV?d00001 From e2597f19b9fe0e3e967a946cd2a957052e608b39 Mon Sep 17 00:00:00 2001 From: thomas-senechal Date: Tue, 23 Jul 2024 20:41:58 +0200 Subject: [PATCH 05/10] Add Upload website func and some website constants --- pkg/website/const.go | 8 +++++ pkg/website/upload.go | 83 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 pkg/website/const.go create mode 100644 pkg/website/upload.go diff --git a/pkg/website/const.go b/pkg/website/const.go new file mode 100644 index 0000000..dd42fbd --- /dev/null +++ b/pkg/website/const.go @@ -0,0 +1,8 @@ +package website + +const ( + nbChunkKey = "\000" + ownerKey = "OWNER" + + ChunkSize = 64_000 // 64KB +) diff --git a/pkg/website/upload.go b/pkg/website/upload.go new file mode 100644 index 0000000..48889c8 --- /dev/null +++ b/pkg/website/upload.go @@ -0,0 +1,83 @@ +package website + +import ( + "fmt" + + "github.com/massalabs/DeWeb/int/config" + mwUtils "github.com/massalabs/station-massa-wallet/pkg/utils" + "github.com/massalabs/station/pkg/convert" + "github.com/massalabs/station/pkg/logger" + "github.com/massalabs/station/pkg/node/sendoperation" + "github.com/massalabs/station/pkg/node/sendoperation/signer" + "github.com/massalabs/station/pkg/onchain" +) + +const ( + appendFunction = "appendBytesToWebsite" +) + +func UploadChunk( + websiteAddress string, + config *config.Config, + chunk []byte, + chunkIndex int, +) (operationID string, err error) { + if !mwUtils.IsValidAddress(websiteAddress) { + return "", fmt.Errorf("invalid website address") + } + + if len(chunk) == 0 { + return "", fmt.Errorf("chunk is empty, no data to upload") + } + + params, err := prepareUploadParams(chunk, chunkIndex) + if err != nil { + return "", fmt.Errorf("preparing upload params: %w", err) + } + + uploadCost, err := ComputeChunkCost(chunkIndex, len(chunk)) + if err != nil { + return "", fmt.Errorf("computing chunk cost: %w", err) + } + + logger.Debugf("Uploading chunk %d to website at address %s with %d nMAS", chunkIndex, websiteAddress, uploadCost) + + return performUpload(config, websiteAddress, params, uploadCost, chunkIndex) +} + +func prepareUploadParams(chunk []byte, chunkIndex int) ([]byte, error) { + params := convert.I32ToBytes(chunkIndex) + params = append(params, convert.U32ToBytes(len(chunk))...) + params = append(params, chunk...) + + return params, nil +} + +func performUpload( + config *config.Config, + websiteAddress string, + params []byte, + uploadCost int, + chunkIndex int, +) (string, error) { + res, err := onchain.CallFunction( + &config.NetworkInfos, + config.WalletNickname, + websiteAddress, + appendFunction, + params, + config.MinimalFees, + config.MaxGas, + uint64(uploadCost), + config.Expiry, + false, + sendoperation.OperationBatch{}, + &signer.WalletPlugin{}, + fmt.Sprintf("Uploading chunk %d", chunkIndex), + ) + if err != nil { + return "", fmt.Errorf("uploading chunk %d failed: %w", chunkIndex, err) + } + + return res.OperationResponse.OperationID, nil +} From 685d1b56a7c1841794531b96dd5904705c3cf782 Mon Sep 17 00:00:00 2001 From: thomas-senechal Date: Tue, 23 Jul 2024 20:42:48 +0200 Subject: [PATCH 06/10] Add a simple io utils function to get bytes from a given filepath --- int/utils/io.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 int/utils/io.go diff --git a/int/utils/io.go b/int/utils/io.go new file mode 100644 index 0000000..eccfeef --- /dev/null +++ b/int/utils/io.go @@ -0,0 +1,19 @@ +package utils + +import ( + "fmt" + "os" +) + +func ReadFileBytes(filePath string) ([]byte, error) { + if _, err := os.Stat(filePath); os.IsNotExist(err) { + return nil, fmt.Errorf("file %s not found", filePath) + } + + fileBytes, err := os.ReadFile(filePath) + if err != nil { + return nil, fmt.Errorf("reading file %s: %w", filePath, err) + } + + return fileBytes, nil +} From 3f735de39a62e7acfadca0477e3413c19342e360 Mon Sep 17 00:00:00 2001 From: thomas-senechal Date: Tue, 23 Jul 2024 20:43:34 +0200 Subject: [PATCH 07/10] Use CLI main.go to make a simple website deployment test --- cmd/cli/main.go | 74 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/cmd/cli/main.go b/cmd/cli/main.go index 5f20207..6847962 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -1,11 +1,83 @@ package main import ( + "fmt" "log" + "os" "github.com/massalabs/DeWeb/int/config" + "github.com/massalabs/DeWeb/int/utils" + "github.com/massalabs/DeWeb/pkg/website" + "github.com/massalabs/station/pkg/logger" ) func main() { - log.Println("Hello, World from DeWeb CLI", config.Version, "!") + err := logger.InitializeGlobal("./deweb-cli.log") + if err != nil { + log.Fatalf("failed to initialize logger: %v", err) + } + + logger.Infof("Hello, World from DeWeb CLI %s !", config.Version) + + if len(os.Args) < 2 { + logger.Fatalf("usage: %s ", os.Args[0]) + } + + config := config.DefaultConfig("fullpower", "https://buildnet.massa.net/api/v2") + + address, err := deployWebsite(config) + if err != nil { + logger.Fatalf("failed to deploy website: %v", err) + } + + logger.Infof("Website uploaded successfully to address: %s", address) +} + +func deployWebsite(config *config.Config) (string, error) { + logger.Debugf("Deploying website contract with config: %+v", config) + + deploymentResult, err := website.Deploy(config) + if err != nil { + return "", fmt.Errorf("failed to deploy website contract: %v", err) + } + + logger.Infof("Website contract deployed at address: %s", deploymentResult.Address) + + chunks, err := processFileForUpload(os.Args[1]) + if err != nil { + return "", fmt.Errorf("failed to process file for upload: %v", err) + } + + logger.Debugf("Uploading %d chunks to website at address: %s", len(chunks), deploymentResult.Address) + + err = uploadChunks(chunks, deploymentResult.Address, config) + if err != nil { + return "", fmt.Errorf("failed to upload chunks: %v", err) + } + + return deploymentResult.Address, nil +} + +func uploadChunks(chunks [][]byte, address string, config *config.Config) error { + for i, chunk := range chunks { + logger.Debugf("Uploading chunk %d with size: %d", i, len(chunk)) + + operationID, err := website.UploadChunk(address, config, chunk, i) + if err != nil { + return fmt.Errorf("failed to upload chunk %d: %v", i, err) + } + + logger.Infof("Chunk %d uploaded with operation ID: %s", i, operationID) + } + + return nil +} + +func processFileForUpload(filepath string) ([][]byte, error) { + websiteBytes, err := utils.ReadFileBytes(filepath) + if err != nil { + return nil, fmt.Errorf("failed to get website zip bytes: %w", err) + } + + return website.DivideIntoChunks(websiteBytes, website.ChunkSize), nil } From 17c38e1db15f0e389e94b6eaf7dc5ec283286ce7 Mon Sep 17 00:00:00 2001 From: thomas-senechal Date: Tue, 23 Jul 2024 20:43:43 +0200 Subject: [PATCH 08/10] Update .gitignore and go.mod files --- .gitignore | 4 ++- go.mod | 22 +++++++++++++- go.sum | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 112 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index cddd635..3734eeb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ build +*.log + # MacOS -.DS_Store \ No newline at end of file +.DS_Store diff --git a/go.mod b/go.mod index 0f5589d..8f6ffa7 100644 --- a/go.mod +++ b/go.mod @@ -2,10 +2,30 @@ module github.com/massalabs/DeWeb go 1.22 -require github.com/stretchr/testify v1.9.0 +require ( + github.com/massalabs/station v0.6.4 + github.com/massalabs/station-massa-wallet v0.4.3 + github.com/stretchr/testify v1.9.0 +) require ( + github.com/awnumar/memcall v0.1.2 // indirect + github.com/awnumar/memguard v0.22.3 // indirect + github.com/btcsuite/btcutil v1.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/klauspost/cpuid/v2 v2.1.0 // indirect + github.com/kr/text v0.2.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/shopspring/decimal v1.3.1 // indirect + github.com/ybbus/jsonrpc/v3 v3.1.4 // indirect + go.uber.org/atomic v1.10.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.24.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/sys v0.13.0 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + howett.net/plist v1.0.0 // indirect + lukechampine.com/blake3 v1.1.7 // indirect ) diff --git a/go.sum b/go.sum index 60ce688..51b0937 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,97 @@ +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/awnumar/memcall v0.1.2 h1:7gOfDTL+BJ6nnbtAp9+HQzUFjtP1hEseRQq8eP055QY= +github.com/awnumar/memcall v0.1.2/go.mod h1:S911igBPR9CThzd/hYQQmTc9SWNu3ZHIlCGaWsWsoJo= +github.com/awnumar/memguard v0.22.3 h1:b4sgUXtbUjhrGELPbuC62wU+BsPQy+8lkWed9Z+pj0Y= +github.com/awnumar/memguard v0.22.3/go.mod h1:mmGunnffnLHlxE5rRgQc3j+uwPZ27eYb61ccr8Clz2Y= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.2 h1:9iZ1Terx9fMIOtq1VrwdqfsATL9MC2l8ZrUY6YZ2uts= +github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.1.0 h1:eyi1Ad2aNJMW95zcSbmGg7Cg6cq3ADwLpMAP96d8rF0= +github.com/klauspost/cpuid/v2 v2.1.0/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/massalabs/station v0.6.4 h1:qAIj13cCQxboBBGdQwtcdoHCPPafOFM/+kO2+t2H2xo= +github.com/massalabs/station v0.6.4/go.mod h1:i9d/zAqeDYxY0Od5LEfEkP6V2osUhA13GwA72ByM8bQ= +github.com/massalabs/station-massa-wallet v0.4.3 h1:ch1+YSSr7ar56GzoTLNp++dl5J0MCfD3x6bGeA1fs38= +github.com/massalabs/station-massa-wallet v0.4.3/go.mod h1:RJcPhvJUkcsA8NhHJEeZGmLSb+DqqhVY3ljiQ8vCe4c= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= +github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= +github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +github.com/ybbus/jsonrpc/v3 v3.1.4 h1:pPmgfWXnqR2GdIlealyCzmV6LV3nxm3w9gwA1B3cP3Y= +github.com/ybbus/jsonrpc/v3 v3.1.4/go.mod h1:4HQTl0UzErqWGa6bSXhp8rIjifMAMa55E4D5wdhe768= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM= +howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g= +lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= +lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= From 05b9b8ee82d327dc35e80653c771a6fdcd77cc9b Mon Sep 17 00:00:00 2001 From: thomas-senechal Date: Wed, 24 Jul 2024 10:42:07 +0200 Subject: [PATCH 09/10] Fix defaultMaxGas value --- int/config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/int/config/config.go b/int/config/config.go index 2eaeab3..827b361 100644 --- a/int/config/config.go +++ b/int/config/config.go @@ -9,7 +9,7 @@ import ( const ( defaultMinimalFees = uint64(100_000_000) - defaultMaxGas = uint64(4_000_000_000) + defaultMaxGas = uint64(3_980_167_295) defaultMaxCoins = uint64(10_000_000_000) defaultExpiry = uint64(3) From 3c2494d3b66f5112092dd90da79fb8b6eddbe2cf Mon Sep 17 00:00:00 2001 From: thomas-senechal Date: Wed, 24 Jul 2024 16:55:36 +0200 Subject: [PATCH 10/10] Move Config struct and related functions to pkg --- cmd/cli/main.go | 7 ++++--- {int => pkg}/config/config.go | 0 pkg/website/deploy.go | 2 +- pkg/website/upload.go | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) rename {int => pkg}/config/config.go (100%) diff --git a/cmd/cli/main.go b/cmd/cli/main.go index 6847962..82aef1d 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -7,6 +7,7 @@ import ( "github.com/massalabs/DeWeb/int/config" "github.com/massalabs/DeWeb/int/utils" + pkgConfig "github.com/massalabs/DeWeb/pkg/config" "github.com/massalabs/DeWeb/pkg/website" "github.com/massalabs/station/pkg/logger" ) @@ -23,7 +24,7 @@ func main() { logger.Fatalf("usage: %s ", os.Args[0]) } - config := config.DefaultConfig("fullpower", "https://buildnet.massa.net/api/v2") + config := pkgConfig.DefaultConfig("fullpower", "https://buildnet.massa.net/api/v2") address, err := deployWebsite(config) if err != nil { @@ -33,7 +34,7 @@ func main() { logger.Infof("Website uploaded successfully to address: %s", address) } -func deployWebsite(config *config.Config) (string, error) { +func deployWebsite(config *pkgConfig.Config) (string, error) { logger.Debugf("Deploying website contract with config: %+v", config) deploymentResult, err := website.Deploy(config) @@ -58,7 +59,7 @@ func deployWebsite(config *config.Config) (string, error) { return deploymentResult.Address, nil } -func uploadChunks(chunks [][]byte, address string, config *config.Config) error { +func uploadChunks(chunks [][]byte, address string, config *pkgConfig.Config) error { for i, chunk := range chunks { logger.Debugf("Uploading chunk %d with size: %d", i, len(chunk)) diff --git a/int/config/config.go b/pkg/config/config.go similarity index 100% rename from int/config/config.go rename to pkg/config/config.go diff --git a/pkg/website/deploy.go b/pkg/website/deploy.go index 29c5423..ba146af 100644 --- a/pkg/website/deploy.go +++ b/pkg/website/deploy.go @@ -4,7 +4,7 @@ import ( _ "embed" "fmt" - "github.com/massalabs/DeWeb/int/config" + "github.com/massalabs/DeWeb/pkg/config" "github.com/massalabs/station/pkg/node/sendoperation" "github.com/massalabs/station/pkg/node/sendoperation/signer" "github.com/massalabs/station/pkg/onchain" diff --git a/pkg/website/upload.go b/pkg/website/upload.go index 48889c8..c92b417 100644 --- a/pkg/website/upload.go +++ b/pkg/website/upload.go @@ -3,7 +3,7 @@ package website import ( "fmt" - "github.com/massalabs/DeWeb/int/config" + "github.com/massalabs/DeWeb/pkg/config" mwUtils "github.com/massalabs/station-massa-wallet/pkg/utils" "github.com/massalabs/station/pkg/convert" "github.com/massalabs/station/pkg/logger"