diff --git a/README.md b/README.md index 2dc40a6..85aab0d 100755 --- a/README.md +++ b/README.md @@ -21,10 +21,6 @@ If you find any system errors or you have better suggestions, please submit an i ``` wss://testnet-rpc.cess.network/ws/ ``` -**CESS test network bootstrap node** -``` -_dnsaddr.boot-miner-testnet.cess.network -``` ## 🚰 CESS test network faucet ``` diff --git a/chain/audit.go b/chain/audit.go index 320f381..a958c47 100755 --- a/chain/audit.go +++ b/chain/audit.go @@ -10,12 +10,9 @@ package chain import ( "fmt" "log" - "strings" - "time" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/pkg/errors" ) // QueryChallengeSnapShot query challenge snapshot data @@ -202,104 +199,21 @@ func (c *ChainClient) SubmitIdleProof(idleProof []types.U8) (string, error) { } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - if len(idleProof) == 0 { - return blockhash, ERR_IdleProofIsEmpty - } - - call, err := types.NewCall(c.metadata, ExtName_Audit_submit_idle_proof, idleProof) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_idle_proof, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_idle_proof, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Audit_submit_idle_proof, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } + return "", ERR_IdleProofIsEmpty } - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_Audit_submit_idle_proof, idleProof) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_idle_proof, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_idle_proof, err) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Audit_submit_idle_proof) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_idle_proof, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_idle_proof, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_idle_proof, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_idle_proof, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Audit_submit_idle_proof, AuditSubmitIdleProof, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // SubmitServiceProof submit service data proof to the chain @@ -317,100 +231,17 @@ func (c *ChainClient) SubmitServiceProof(serviceProof []types.U8) (string, error } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - call, err := types.NewCall(c.metadata, ExtName_Audit_submit_service_proof, serviceProof) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_service_proof, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_service_proof, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Audit_submit_service_proof, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_Audit_submit_service_proof, serviceProof) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_service_proof, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_service_proof, err) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Audit_submit_service_proof) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_service_proof, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_service_proof, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_service_proof, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_service_proof, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Audit_submit_service_proof, AuditSubmitServiceProof, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // SubmitVerifyIdleResult submit validation result of idle data proof to the chain @@ -434,100 +265,17 @@ func (c *ChainClient) SubmitVerifyIdleResult(totalProofHash []types.U8, front, r } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - call, err := types.NewCall(c.metadata, ExtName_Audit_submit_verify_idle_result, totalProofHash, front, rear, accumulator, result, sig, teePuk) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_idle_result, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_idle_result, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_idle_result, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_Audit_submit_verify_idle_result, totalProofHash, front, rear, accumulator, result, sig, teePuk) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_idle_result, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_idle_result, err) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Audit_submit_verify_idle_result) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_idle_result, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_idle_result, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_idle_result, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_idle_result, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Audit_submit_verify_idle_result, AuditSubmitIdleVerifyResult, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // SubmitVerifyServiceResult submit validation result of service data proof to the chain @@ -548,98 +296,15 @@ func (c *ChainClient) SubmitVerifyServiceResult(result types.Bool, sign types.By } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - call, err := types.NewCall(c.metadata, ExtName_Audit_submit_verify_service_result, result, sign, bloomFilter, teePuk) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_service_result, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_service_result, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_service_result, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_Audit_submit_verify_service_result, result, sign, bloomFilter, teePuk) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_service_result, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_service_result, err) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Audit_submit_verify_service_result) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_service_result, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_service_result, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_service_result, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Audit_submit_verify_service_result, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Audit_submit_verify_service_result, AuditSubmitServiceVerifyResult, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } diff --git a/chain/babe.go b/chain/babe.go index 86eee52..1ae4ddc 100644 --- a/chain/babe.go +++ b/chain/babe.go @@ -11,8 +11,8 @@ import ( "fmt" "log" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" ) // QueryAuthorities query consensus rrsc public diff --git a/chain/balances.go b/chain/balances.go index 9aa8dce..6e22ce4 100644 --- a/chain/balances.go +++ b/chain/balances.go @@ -11,10 +11,9 @@ import ( "fmt" "log" "math/big" - "time" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" "github.com/pkg/errors" ) @@ -161,99 +160,29 @@ func (c *ChainClient) TransferToken(dest string, amount string) (string, error) } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - pubkey, err := utils.ParsingPublickey(dest) if err != nil { - return blockhash, errors.Wrapf(err, "[ParsingPublickey]") + return "", errors.Wrapf(err, "[ParsingPublickey]") } address, err := types.NewMultiAddressFromAccountID(pubkey) if err != nil { - return blockhash, errors.Wrapf(err, "[NewMultiAddressFromAccountID]") + return "", errors.Wrapf(err, "[NewMultiAddressFromAccountID]") } amount_bg, ok := new(big.Int).SetString(amount, 10) if !ok { - return blockhash, errors.New("[TransferToken] invalid amount") - } - - call, err := types.NewCall(c.metadata, ExtName_Balances_transferKeepAlive, address, types.NewUCompact(amount_bg)) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Balances_transferKeepAlive, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Balances_transferKeepAlive, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Balances_transferKeepAlive, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err = c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Balances_transferKeepAlive, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE + return "", errors.New("[TransferToken] invalid amount") } - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) + newcall, err := types.NewCall(c.metadata, ExtName_Balances_transferKeepAlive, address, types.NewUCompact(amount_bg)) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Balances_transferKeepAlive, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Balances_transferKeepAlive, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Balances_transferKeepAlive) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Balances_transferKeepAlive, err) - c.SetRpcState(false) - return blockhash, err - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Balances_transferKeepAlive, BalancesTransfer, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Balances_transferKeepAlive, err) } + return blockhash, nil } diff --git a/chain/chain.go b/chain/chain.go index 588e546..f8e7645 100755 --- a/chain/chain.go +++ b/chain/chain.go @@ -10,6 +10,7 @@ package chain import ( "context" "errors" + "fmt" "io" "log" "math" @@ -18,13 +19,13 @@ import ( "sync" "time" + gsrpc "github.com/AstaFrode/go-substrate-rpc-client/v4" + "github.com/AstaFrode/go-substrate-rpc-client/v4/registry/retriever" + "github.com/AstaFrode/go-substrate-rpc-client/v4/registry/state" + "github.com/AstaFrode/go-substrate-rpc-client/v4/signature" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" + "github.com/AstaFrode/go-substrate-rpc-client/v4/xxhash" "github.com/CESSProject/cess-go-sdk/utils" - gsrpc "github.com/centrifuge/go-substrate-rpc-client/v4" - "github.com/centrifuge/go-substrate-rpc-client/v4/registry/retriever" - "github.com/centrifuge/go-substrate-rpc-client/v4/registry/state" - "github.com/centrifuge/go-substrate-rpc-client/v4/signature" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/centrifuge/go-substrate-rpc-client/v4/xxhash" ) type ChainClient struct { @@ -398,3 +399,76 @@ func (c *ChainClient) Close() { c.api = nil } } + +func (c *ChainClient) SubmitExtrinsic(call types.Call, extrinsicName string) (string, error) { + ext := types.NewExtrinsic(call) + + key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) + if err != nil { + return "", fmt.Errorf(" CreateStorageKey err: %v", err) + } + + if !c.GetRpcState() { + err = c.ReconnectRpc() + if err != nil { + return "", ERR_RPC_CONNECTION + } + } + + var accountInfo types.AccountInfo + ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + if err != nil { + c.SetRpcState(false) + return "", fmt.Errorf(" GetStorageLatest err: %v", err) + } + + if !ok { + return "", fmt.Errorf(" GetStorageLatest: %v", ERR_RPC_EMPTY_VALUE) + } + + o := types.SignatureOptions{ + BlockHash: c.genesisHash, + Era: types.ExtrinsicEra{IsMortalEra: false}, + GenesisHash: c.genesisHash, + Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), + SpecVersion: c.runtimeVersion.SpecVersion, + Tip: types.NewUCompactFromUInt(0), + TransactionVersion: c.runtimeVersion.TransactionVersion, + } + + err = ext.Sign(c.keyring, o) + if err != nil { + return "", fmt.Errorf(" extrinsic sign err: %v", err) + } + + subscription, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + if err != nil { + c.SetRpcState(false) + return "", fmt.Errorf(" SubmitAndWatchExtrinsic err: %v", err) + } + defer subscription.Unsubscribe() + + timeout := time.NewTimer(c.packingTime) + defer timeout.Stop() + + blockhash := "" + for { + select { + case status := <-subscription.Chan(): + if status.IsInBlock { + blockhash = status.AsInBlock.Hex() + if extrinsicName != "" { + err = c.RetrieveEvent(status.AsInBlock, extrinsicName, c.signatureAcc) + if err != nil { + return blockhash, fmt.Errorf(" RetrieveEvent err: %v", err) + } + } + return blockhash, nil + } + case err = <-subscription.Err(): + return blockhash, fmt.Errorf(" subscription err: %v", err) + case <-timeout.C: + return blockhash, errors.New(" subscription timeout") + } + } +} diff --git a/chain/chainer.go b/chain/chainer.go index 03dd05c..d605379 100755 --- a/chain/chainer.go +++ b/chain/chainer.go @@ -8,8 +8,8 @@ package chain import ( - gsrpc "github.com/centrifuge/go-substrate-rpc-client/v4" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" + gsrpc "github.com/AstaFrode/go-substrate-rpc-client/v4" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" ) // chain client interface @@ -38,27 +38,23 @@ type Chainer interface { QueryAuthorityList(accountID []byte, block int32) ([]types.AccountID, error) Authorize(accountID []byte) (string, error) CancelAuthorize(accountID []byte) (string, error) - RegisterOss(peerId []byte, domain string) (string, error) - UpdateOss(peerId string, domain string) (string, error) + RegisterOss(domain string) (string, error) + UpdateOss(domain string) (string, error) DestroyOss() (string, error) // EVM SendEvmCall(source types.H160, target types.H160, input types.Bytes, value types.U256, gasLimit types.U64, maxFeePerGas types.U256, accessList []AccessInfo) (string, error) // FileBank - QueryBucket(accountID []byte, bucketName string, block int32) (BucketInfo, error) QueryDealMap(fid string, block int32) (StorageOrder, error) QueryDealMapList(block int32) ([]StorageOrder, error) QueryFile(fid string, block int32) (FileMetadata, error) QueryRestoralOrder(fragmentHash string, block int32) (RestoralOrderInfo, error) QueryAllRestoralOrder(block int32) ([]RestoralOrderInfo, error) - QueryAllBucketName(accountID []byte, block int32) ([]string, error) QueryUserHoldFileList(accountID []byte, block int32) ([]UserFileSliceInfo, error) QueryUserFidList(accountID []byte, block int32) ([]string, error) - PlaceStorageOrder(fid, file_name, bucket_name, territory_name string, segment []SegmentDataInfo, owner []byte, file_size uint64) (string, error) + PlaceStorageOrder(fid, file_name, territory_name string, segment []SegmentDataInfo, owner []byte, file_size uint64) (string, error) UploadDeclaration(fid string, segment []SegmentList, user UserBrief, filesize uint64) (string, error) - CreateBucket(owner []byte, bucketName string) (string, error) - DeleteBucket(owner []byte, bucketName string) (string, error) DeleteFile(owner []byte, fid string) (string, error) TransferReport(index uint8, fid string) (string, error) GenerateRestoralOrder(fid, fragmentHash string) (string, error) @@ -87,17 +83,17 @@ type Chainer interface { QueryAllRestoralTarget(block int32) ([]RestoralTargetInfo, error) QueryPendingReplacements(accountID []byte, block int32) (types.U128, error) QueryCompleteSnapShot(era uint32, block int32) (uint32, uint64, error) - QueryCompleteMinerSnapShot(puk []byte, block int32) (MinerCompleteInfo, error) + QueryCompleteMinerSnapShot(puk []byte, block int32) ([]MinerCompleteInfo, error) IncreaseCollateral(accountID []byte, token string) (string, error) IncreaseDeclarationSpace(tibCount uint32) (string, error) MinerExitPrep() (string, error) MinerWithdraw() (string, error) ReceiveReward() (string, string, error) RegisterPoisKey(poisKey PoISKeyInfo, teeSignWithAcc, teeSign types.Bytes, teePuk WorkerPublicKey) (string, error) - RegnstkSminer(earnings string, addr []byte, staking uint64, tibCount uint32) (string, error) - RegnstkAssignStaking(earnings string, peerId []byte, stakingAcc string, tibCount uint32) (string, error) + RegnstkSminer(earnings string, endpoint []byte, staking uint64, tibCount uint32) (string, error) + RegnstkAssignStaking(earnings string, endpoint []byte, stakingAcc string, tibCount uint32) (string, error) UpdateBeneficiary(earnings string) (string, error) - UpdateSminerAddr(addr []byte) (string, error) + UpdateSminerEndpoint(endpoint []byte) (string, error) // Staking QueryCounterForValidators(block int32) (uint32, error) @@ -188,6 +184,6 @@ type Chainer interface { // event RetrieveAllEventName(blockhash types.Hash) ([]string, error) - RetrieveEvent(blockhash types.Hash, extrinsic_name, event_name, signer string) error + RetrieveEvent(blockhash types.Hash, extrinsic_name, signer string) error RetrieveExtrinsicsAndEvents(blockhash types.Hash) ([]string, map[string][]string, error) } diff --git a/chain/deoss.go b/chain/deoss.go index fb0827c..fd4400c 100755 --- a/chain/deoss.go +++ b/chain/deoss.go @@ -10,12 +10,10 @@ package chain import ( "fmt" "log" - "strings" - "time" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types/codec" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" "github.com/mr-tron/base58" "github.com/pkg/errors" ) @@ -281,105 +279,22 @@ func (c *ChainClient) Authorize(accountID []byte) (string, error) { } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - acc, err := types.NewAccountID(accountID) if err != nil { - return blockhash, errors.Wrap(err, "[NewAccountID]") + return "", errors.Wrap(err, "[NewAccountID]") } - call, err := types.NewCall(c.metadata, ExtName_Oss_authorize, *acc) + newcall, err := types.NewCall(c.metadata, ExtName_Oss_authorize, *acc) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Oss_authorize, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Oss_authorize, err) } - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Oss_authorize) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Oss_authorize, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Oss_authorize, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Oss_authorize, err) } - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Oss_authorize, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Oss_authorize, err) - return blockhash, err - } - - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Oss_authorize, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Oss_authorize, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Oss_authorize, OssAuthorize, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // CancelAuthorize cancels authorisation for an account @@ -397,100 +312,17 @@ func (c *ChainClient) CancelAuthorize(accountID []byte) (string, error) { } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - call, err := types.NewCall(c.metadata, ExtName_Oss_cancel_authorize, accountID) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Oss_cancel_authorize, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Oss_cancel_authorize, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Oss_cancel_authorize, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_Oss_cancel_authorize, accountID) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Oss_cancel_authorize, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Oss_cancel_authorize, err) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Oss_cancel_authorize) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Oss_cancel_authorize, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Oss_cancel_authorize, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Oss_cancel_authorize, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Oss_cancel_authorize, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Oss_cancel_authorize, OssCancelAuthorize, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // RegisterOss registered as oss role @@ -500,7 +332,7 @@ func (c *ChainClient) CancelAuthorize(accountID []byte) (string, error) { // Return: // - string: block hash // - error: error message -func (c *ChainClient) RegisterOss(peerId []byte, domain string) (string, error) { +func (c *ChainClient) RegisterOss(domain string) (string, error) { <-c.tradeCh defer func() { c.tradeCh <- true @@ -509,118 +341,21 @@ func (c *ChainClient) RegisterOss(peerId []byte, domain string) (string, error) } }() - var ( - blockhash string - peerid PeerId - accountInfo types.AccountInfo - ) - - if len(peerId) != PeerIdPublicKeyLen { - return blockhash, errors.New("register oss: invalid peerid") - } - for i := 0; i < len(peerid); i++ { - peerid[i] = types.U8(peerId[i]) - } - if len(domain) > int(MaxDomainNameLength) { - return blockhash, fmt.Errorf("register deoss: Domain name length cannot exceed %v characters", MaxDomainNameLength) - } - - call, err := types.NewCall(c.metadata, ExtName_Oss_register, peerid, types.NewBytes([]byte(domain))) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Oss_register, err) - return blockhash, err + return "", fmt.Errorf("register deoss: Domain name length cannot exceed %v characters", MaxDomainNameLength) } - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) + newcall, err := types.NewCall(c.metadata, ExtName_Oss_register, PeerId{}, types.NewBytes([]byte(domain))) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Oss_register, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Oss_register, err) } - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Oss_register, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Oss_register) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Oss_register, err) - c.SetRpcState(false) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Oss_register, err) } - if !ok { - keyStr, _ := utils.NumsToByteStr(key, map[string]bool{}) - return blockhash, fmt.Errorf( - "chain rpc.state.GetStorageLatest[%v]: %v", - keyStr, - ERR_RPC_EMPTY_VALUE, - ) - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Oss_register, err) - return blockhash, err - } - - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Oss_register, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Oss_register, err) - c.SetRpcState(false) - return blockhash, errors.Wrap(err, "[SubmitAndWatchExtrinsic]") - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Oss_register, OssOssRegister, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // UpdateOss update oss's peerId or domain @@ -630,7 +365,7 @@ func (c *ChainClient) RegisterOss(peerId []byte, domain string) (string, error) // Return: // - string: block hash // - error: error message -func (c *ChainClient) UpdateOss(peerId string, domain string) (string, error) { +func (c *ChainClient) UpdateOss(domain string) (string, error) { <-c.tradeCh defer func() { c.tradeCh <- true @@ -639,110 +374,21 @@ func (c *ChainClient) UpdateOss(peerId string, domain string) (string, error) { } }() - var ( - blockhash string - peerid PeerId - accountInfo types.AccountInfo - ) - - if len(peerid) != len(peerId) { - return blockhash, errors.New("update oss: invalid peerid") - } - for i := 0; i < len(peerid); i++ { - peerid[i] = types.U8(peerId[i]) - } - if len(domain) > int(MaxDomainNameLength) { - return blockhash, fmt.Errorf("update oss: domain name length cannot exceed %v", MaxDomainNameLength) + return "", fmt.Errorf("update oss: domain name length cannot exceed %v", MaxDomainNameLength) } - call, err := types.NewCall(c.metadata, ExtName_Oss_update, peerid, types.NewBytes([]byte(domain))) + newcall, err := types.NewCall(c.metadata, ExtName_Oss_update, PeerId{}, types.NewBytes([]byte(domain))) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Oss_update, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Oss_update, err) } - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Oss_update) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Oss_update, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Oss_update, err) } - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Oss_update, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Oss_update, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Oss_update, err) - return blockhash, err - } - - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Oss_update, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Oss_update, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Oss_update, OssOssUpdate, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // DestroyOss destroys the oss role of the current account @@ -759,99 +405,15 @@ func (c *ChainClient) DestroyOss() (string, error) { } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - call, err := types.NewCall(c.metadata, ExtName_Oss_destroy) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Oss_destroy, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Oss_destroy, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Oss_destroy, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Oss_destroy, err) - c.SetRpcState(false) - return blockhash, err - } - - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) + newcall, err := types.NewCall(c.metadata, ExtName_Oss_destroy) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Oss_destroy, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Oss_destroy, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Oss_destroy) if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Oss_destroy, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Oss_destroy, err) - c.SetRpcState(false) - return blockhash, err - } + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Oss_destroy, err) } - defer sub.Unsubscribe() - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Oss_destroy, OssOssDestroy, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } diff --git a/chain/event_name.go b/chain/event_name.go index 1fa133d..aca1467 100644 --- a/chain/event_name.go +++ b/chain/event_name.go @@ -55,7 +55,7 @@ const ( SminerIncreaseCollateral = "Sminer.IncreaseCollateral" SminerDeposit = "Sminer.Deposit" SminerUpdateBeneficiary = "Sminer.UpdateBeneficiary" - SminerUpdatePeerId = "Sminer.UpdatePeerId" + SminerUpdateEndpoint = "Sminer.UpdateEndPoint" SminerReceive = "Sminer.Receive" SminerMinerExitPrep = "Sminer.MinerExitPrep" SminerWithdraw = "Sminer.Withdraw" diff --git a/chain/event_type.go b/chain/event_type.go index 2604c21..b422698 100644 --- a/chain/event_type.go +++ b/chain/event_type.go @@ -8,7 +8,7 @@ package chain import ( - "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" ) // ****************************************************** diff --git a/chain/evm.go b/chain/evm.go index b9db776..82bd8e1 100644 --- a/chain/evm.go +++ b/chain/evm.go @@ -10,12 +10,9 @@ package chain import ( "fmt" "log" - "strings" - "time" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/pkg/errors" ) func (c *ChainClient) SendEvmCall(source types.H160, target types.H160, input types.Bytes, value types.U256, gasLimit types.U64, maxFeePerGas types.U256, accessList []AccessInfo) (string, error) { @@ -27,107 +24,21 @@ func (c *ChainClient) SendEvmCall(source types.H160, target types.H160, input ty } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - var nonce types.Option[types.U256] nonce.SetNone() var maxPriorityFeePerGas types.Option[types.U256] maxPriorityFeePerGas.SetNone() - call, err := types.NewCall(c.metadata, ExtName_Evm_call, source, target, input, value, gasLimit, maxFeePerGas, maxPriorityFeePerGas, nonce, accessList) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Evm_call, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Evm_call, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Evm_call, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_Evm_call, source, target, input, value, gasLimit, maxFeePerGas, maxPriorityFeePerGas, nonce, accessList) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Evm_call, err) - c.SetRpcState(false) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Evm_call, err) } - if !ok { - keyStr, _ := utils.NumsToByteStr(key, map[string]bool{}) - return blockhash, fmt.Errorf( - "chain rpc.state.GetStorageLatest[%v]: %v", - keyStr, - ERR_RPC_EMPTY_VALUE, - ) - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Evm_call) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Evm_call, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Evm_call, err) } - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Evm_call, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Evm_call, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } diff --git a/chain/extrinsic_name.go b/chain/extrinsic_name.go index c44f7de..3414cf6 100644 --- a/chain/extrinsic_name.go +++ b/chain/extrinsic_name.go @@ -8,7 +8,7 @@ package chain import ( - "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" ) var ExtrinsicsName map[types.CallIndex]string @@ -20,6 +20,7 @@ const ( ExtName_AssetConversion_remove_liquidity = "AssetConversion.remove_liquidity" ExtName_AssetConversion_swap_exact_tokens_for_tokens = "AssetConversion.swap_exact_tokens_for_tokens" ExtName_AssetConversion_swap_tokens_for_exact_tokens = "AssetConversion.swap_tokens_for_exact_tokens" + ExtName_AssetConversion_stouch = "AssetConversion.touch" // AssetRate ExtName_AssetRate_create = "AssetRate.create" @@ -56,6 +57,7 @@ const ( ExtName_Assets_touch = "Assets.touch" ExtName_Assets_touch_other = "Assets.touch_other" ExtName_Assets_transfer = "Assets.transfer" + ExtName_Assets_transfer_all = "Assets.transfer_all" ExtName_Assets_transfer_approved = "Assets.transfer_approved" ExtName_Assets_transfer_keep_alive = "Assets.transfer_keep_alive" ExtName_Assets_transfer_ownership = "Assets.transfer_ownership" @@ -76,16 +78,15 @@ const ( ExtName_Babe_report_equivocation_unsigned = "Babe.report_equivocation_unsigned" // Balances + ExtName_Balances_burn = "Balances.burn" ExtName_Balances_force_adjust_total_issuance = "Balances.force_adjust_total_issuance" ExtName_Balances_force_set_balance = "Balances.force_set_balance" ExtName_Balances_force_transfer = "Balances.force_transfer" ExtName_Balances_force_unreserve = "Balances.force_unreserve" - // ExtName_Balances_set_balance_deprecated = "Balances.set_balance_deprecated" - // ExtName_Balances_transfer = "Balances.transfer" - ExtName_Balances_transfer_all = "Balances.transfer_all" - ExtName_Balances_transfer_allow_death = "Balances.transfer_allow_death" - ExtName_Balances_transferKeepAlive = "Balances.transfer_keep_alive" - ExtName_Balances_upgrade_accounts = "Balances.upgrade_accounts" + ExtName_Balances_transfer_all = "Balances.transfer_all" + ExtName_Balances_transfer_allow_death = "Balances.transfer_allow_death" + ExtName_Balances_transferKeepAlive = "Balances.transfer_keep_alive" + ExtName_Balances_upgrade_accounts = "Balances.upgrade_accounts" // BaseFee ExtName_BaseFee_set_base_fee_per_gas = "BaseFee.set_base_fee_per_gas" @@ -159,17 +160,14 @@ const ( ExtName_FileBank_cert_idle_space = "FileBank.cert_idle_space" ExtName_FileBank_claim_restoral_noexist_order = "FileBank.claim_restoral_noexist_order" ExtName_FileBank_claim_restoral_order = "FileBank.claim_restoral_order" - ExtName_FileBank_create_bucket = "FileBank.create_bucket" - ExtName_FileBank_delete_bucket = "FileBank.delete_bucket" ExtName_FileBank_delete_file = "FileBank.delete_file" ExtName_FileBank_generate_restoral_order = "FileBank.generate_restoral_order" - //ExtName_FileBank_ownership_transfer = "FileBank.ownership_transfer" - ExtName_FileBank_replace_idle_space = "FileBank.replace_idle_space" - ExtName_FileBank_restoral_order_complete = "FileBank.restoral_order_complete" - ExtName_FileBank_root_clear_file = "FileBank.root_clear_file" - ExtName_FileBank_territory_file_delivery = "FileBank.territory_file_delivery" - ExtName_FileBank_transfer_report = "FileBank.transfer_report" - ExtName_FileBank_upload_declaration = "FileBank.upload_declaration" + ExtName_FileBank_replace_idle_space = "FileBank.replace_idle_space" + ExtName_FileBank_restoral_order_complete = "FileBank.restoral_order_complete" + ExtName_FileBank_root_clear_file = "FileBank.root_clear_file" + ExtName_FileBank_territory_file_delivery = "FileBank.territory_file_delivery" + ExtName_FileBank_transfer_report = "FileBank.transfer_report" + ExtName_FileBank_upload_declaration = "FileBank.upload_declaration" // Grandpa ExtName_Grandpa_note_stalled = "Grandpa.note_stalled" @@ -240,6 +238,7 @@ const ( ExtName_PoolAssets_touch = "PoolAssets.touch" ExtName_PoolAssets_touch_other = "PoolAssets.touch_other" ExtName_PoolAssets_transfer = "PoolAssets.transfer" + ExtName_PoolAssets_transfer_all = "PoolAssets.transfer_all" ExtName_PoolAssets_transfer_approved = "PoolAssets.transfer_approved" ExtName_PoolAssets_transfer_keep_alive = "PoolAssets.transfer_keep_alive" ExtName_PoolAssets_transfer_ownership = "PoolAssets.transfer_ownership" @@ -289,6 +288,7 @@ const ( // Sminer ExtName_Sminer_clear_miner_service = "Sminer.clear_miner_service" + ExtName_Sminer_decrease_declaration_space = "Sminer.decrease_declaration_space" ExtName_Sminer_faucet = "Sminer.faucet" ExtName_Sminer_faucet_top_up = "Sminer.faucet_top_up" ExtName_Sminer_increase_collateral = "Sminer.increase_collateral" @@ -302,8 +302,8 @@ const ( ExtName_Sminer_regnstk_assign_staking = "Sminer.regnstk_assign_staking" ExtName_Sminer_set_facuet_whitelist = "Sminer.set_facuet_whitelist" ExtName_Sminer_update_beneficiary = "Sminer.update_beneficiary" + ExtName_Sminer_update_endpoint = "Sminer.update_endpoint" ExtName_Sminer_update_expender = "Sminer.update_expender" - ExtName_Sminer_update_peer_id = "Sminer.update_peer_id" // Staking ExtName_Staking_bond = "Staking.bond" @@ -346,27 +346,24 @@ const ( ExtName_StateTrieMigration_set_signed_max_limits = "StateTrieMigration.set_signed_max_limits" // StorageHandler - //ExtName_StorageHandler_buySpace = "StorageHandler.buy_space" - ExtName_StorageHandler_buy_consignment = "StorageHandler.buy_consignment" - ExtName_StorageHandler_cancel_consignment = "StorageHandler.cancel_consignment" - ExtName_StorageHandler_cancel_purchase_action = "StorageHandler.cancel_purchase_action" - ExtName_StorageHandler_clear_service_space = "StorageHandler.clear_service_space" - //ExtName_StorageHandler_clear_user_used_space = "StorageHandler.clear_user_used_space" - ExtName_StorageHandler_create_order = "StorageHandler.create_order" - ExtName_StorageHandler_exec_consignment = "StorageHandler.exec_consignment" - ExtName_StorageHandler_exec_order = "StorageHandler.exec_order" - ExtName_StorageHandler_expanding_territory = "StorageHandler.expanding_territory" - ExtName_StorageHandler_mint_territory = "StorageHandler.mint_territory" - ExtName_StorageHandler_reactivate_territory = "StorageHandler.reactivate_territory" - ExtName_StorageHandler_renewal_territory = "StorageHandler.renewal_territory" - ExtName_StorageHandler_territory_consignment = "StorageHandler.territory_consignment" - ExtName_StorageHandler_territory_grants = "StorageHandler.territory_grants" - ExtName_StorageHandler_territory_rename = "StorageHandler.territory_rename" - //ExtName_StorageHandler_expansion_space = "StorageHandler.expansion_space" + ExtName_StorageHandler_buy_consignment = "StorageHandler.buy_consignment" + ExtName_StorageHandler_cancel_consignment = "StorageHandler.cancel_consignment" + ExtName_StorageHandler_cancel_purchase_action = "StorageHandler.cancel_purchase_action" + ExtName_StorageHandler_clear_service_space = "StorageHandler.clear_service_space" + ExtName_StorageHandler_create_order = "StorageHandler.create_order" + ExtName_StorageHandler_define_update_price = "StorageHandler.define_update_price" + ExtName_StorageHandler_exec_consignment = "StorageHandler.exec_consignment" + ExtName_StorageHandler_exec_order = "StorageHandler.exec_order" + ExtName_StorageHandler_expanding_territory = "StorageHandler.expanding_territory" + ExtName_StorageHandler_mint_territory = "StorageHandler.mint_territory" + ExtName_StorageHandler_reactivate_territory = "StorageHandler.reactivate_territory" + ExtName_StorageHandler_renewal_territory = "StorageHandler.renewal_territory" + ExtName_StorageHandler_territory_consignment = "StorageHandler.territory_consignment" + ExtName_StorageHandler_territory_grants = "StorageHandler.territory_grants" + ExtName_StorageHandler_territory_rename = "StorageHandler.territory_rename" ExtName_StorageHandler_update_expired_exec = "StorageHandler.update_expired_exec" ExtName_StorageHandler_update_price = "StorageHandler.update_price" ExtName_StorageHandler_update_user_territory_life = "StorageHandler.update_user_territory_life" - //ExtName_StorageHandler_update_user_life = "StorageHandler.update_user_life" // Sudo ExtName_Sudo_remove_key = "Sudo.remove_key" @@ -424,15 +421,12 @@ const ( ExtName_TransactionStorage_store = "TransactionStorage.store" // Treasury - ExtName_Treasury_approve_proposal = "Treasury.approve_proposal" - ExtName_Treasury_check_status = "Treasury.check_status" - ExtName_Treasury_payout = "Treasury.payout" - ExtName_Treasury_propose_spend = "Treasury.propose_spend" - ExtName_Treasury_reject_proposal = "Treasury.reject_proposal" - ExtName_Treasury_remove_approval = "Treasury.remove_approval" - ExtName_Treasury_spend = "Treasury.spend" - ExtName_Treasury_spend_local = "Treasury.spend_local" - ExtName_Treasury_void_spend = "Treasury.void_spend" + ExtName_Treasury_check_status = "Treasury.check_status" + ExtName_Treasury_payout = "Treasury.payout" + ExtName_Treasury_remove_approval = "Treasury.remove_approval" + ExtName_Treasury_spend = "Treasury.spend" + ExtName_Treasury_spend_local = "Treasury.spend_local" + ExtName_Treasury_void_spend = "Treasury.void_spend" // Utility ExtName_Utility_as_derivative = "Utility.as_derivative" @@ -457,6 +451,7 @@ const ( // - If you need to parse all transaction events, you need to call this function. func (c *ChainClient) InitExtrinsicsName() error { ExtrinsicsName = make(map[types.CallIndex]string, 0) + // AssetConversion if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_AssetConversion_add_liquidity); err == nil { ExtrinsicsName[callIndex] = ExtName_AssetConversion_add_liquidity @@ -483,6 +478,11 @@ func (c *ChainClient) InitExtrinsicsName() error { } else { return err } + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_AssetConversion_stouch); err == nil { + ExtrinsicsName[callIndex] = ExtName_AssetConversion_stouch + } else { + return err + } // AssetRate if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_AssetRate_create); err == nil { @@ -647,6 +647,11 @@ func (c *ChainClient) InitExtrinsicsName() error { } else { return err } + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Assets_transfer_all); err == nil { + ExtrinsicsName[callIndex] = ExtName_Assets_transfer_all + } else { + return err + } if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Assets_transfer_approved); err == nil { ExtrinsicsName[callIndex] = ExtName_Assets_transfer_approved } else { @@ -723,6 +728,11 @@ func (c *ChainClient) InitExtrinsicsName() error { } // Balances + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Balances_burn); err == nil { + ExtrinsicsName[callIndex] = ExtName_Balances_burn + } else { + return err + } if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Balances_force_adjust_total_issuance); err == nil { ExtrinsicsName[callIndex] = ExtName_Balances_force_adjust_total_issuance } else { @@ -743,16 +753,6 @@ func (c *ChainClient) InitExtrinsicsName() error { } else { return err } - // if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Balances_set_balance_deprecated); err == nil { - // ExtrinsicsName[callIndex] = ExtName_Balances_set_balance_deprecated - // } else { - // return err - // } - // if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Balances_transfer); err == nil { - // ExtrinsicsName[callIndex] = ExtName_Balances_transfer - // } else { - // return err - // } if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Balances_transfer_all); err == nil { ExtrinsicsName[callIndex] = ExtName_Balances_transfer_all } else { @@ -1047,16 +1047,6 @@ func (c *ChainClient) InitExtrinsicsName() error { } else { return err } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_FileBank_create_bucket); err == nil { - ExtrinsicsName[callIndex] = ExtName_FileBank_create_bucket - } else { - return err - } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_FileBank_delete_bucket); err == nil { - ExtrinsicsName[callIndex] = ExtName_FileBank_delete_bucket - } else { - return err - } if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_FileBank_delete_file); err == nil { ExtrinsicsName[callIndex] = ExtName_FileBank_delete_file } else { @@ -1067,11 +1057,7 @@ func (c *ChainClient) InitExtrinsicsName() error { } else { return err } - // if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_FileBank_ownership_transfer); err == nil { - // ExtrinsicsName[callIndex] = ExtName_FileBank_ownership_transfer - // } else { - // return err - // } + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_FileBank_replace_idle_space); err == nil { ExtrinsicsName[callIndex] = ExtName_FileBank_replace_idle_space } else { @@ -1388,6 +1374,11 @@ func (c *ChainClient) InitExtrinsicsName() error { } else { return err } + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_PoolAssets_transfer_all); err == nil { + ExtrinsicsName[callIndex] = ExtName_PoolAssets_transfer_all + } else { + return err + } if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_PoolAssets_transfer_approved); err == nil { ExtrinsicsName[callIndex] = ExtName_PoolAssets_transfer_approved } else { @@ -1585,6 +1576,11 @@ func (c *ChainClient) InitExtrinsicsName() error { } else { return err } + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Sminer_decrease_declaration_space); err == nil { + ExtrinsicsName[callIndex] = ExtName_Sminer_decrease_declaration_space + } else { + return err + } if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Sminer_faucet); err == nil { ExtrinsicsName[callIndex] = ExtName_Sminer_faucet } else { @@ -1650,13 +1646,13 @@ func (c *ChainClient) InitExtrinsicsName() error { } else { return err } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Sminer_update_expender); err == nil { - ExtrinsicsName[callIndex] = ExtName_Sminer_update_expender + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Sminer_update_endpoint); err == nil { + ExtrinsicsName[callIndex] = ExtName_Sminer_update_endpoint } else { return err } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Sminer_update_peer_id); err == nil { - ExtrinsicsName[callIndex] = ExtName_Sminer_update_peer_id + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Sminer_update_expender); err == nil { + ExtrinsicsName[callIndex] = ExtName_Sminer_update_expender } else { return err } @@ -1846,26 +1842,36 @@ func (c *ChainClient) InitExtrinsicsName() error { } // StorageHandler - // if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_buySpace); err == nil { - // ExtrinsicsName[callIndex] = ExtName_StorageHandler_buySpace - // } else { - // return err - // } + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_buy_consignment); err == nil { + ExtrinsicsName[callIndex] = ExtName_StorageHandler_buy_consignment + } else { + return err + } + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_cancel_consignment); err == nil { + ExtrinsicsName[callIndex] = ExtName_StorageHandler_cancel_consignment + } else { + return err + } + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_cancel_purchase_action); err == nil { + ExtrinsicsName[callIndex] = ExtName_StorageHandler_cancel_purchase_action + } else { + return err + } if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_clear_service_space); err == nil { ExtrinsicsName[callIndex] = ExtName_StorageHandler_clear_service_space } else { return err } - // if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_clear_user_used_space); err == nil { - // ExtrinsicsName[callIndex] = ExtName_StorageHandler_clear_user_used_space - // } else { - // return err - // } if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_create_order); err == nil { ExtrinsicsName[callIndex] = ExtName_StorageHandler_create_order } else { return err } + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_define_update_price); err == nil { + ExtrinsicsName[callIndex] = ExtName_StorageHandler_define_update_price + } else { + return err + } if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_exec_consignment); err == nil { ExtrinsicsName[callIndex] = ExtName_StorageHandler_exec_consignment } else { @@ -1876,38 +1882,18 @@ func (c *ChainClient) InitExtrinsicsName() error { } else { return err } - // if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_expansion_space); err == nil { - // ExtrinsicsName[callIndex] = ExtName_StorageHandler_expansion_space - // } else { - // return err - // } - // if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_renewal_space); err == nil { - // ExtrinsicsName[callIndex] = ExtName_StorageHandler_renewal_space - // } else { - // return err - // } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_update_price); err == nil { - ExtrinsicsName[callIndex] = ExtName_StorageHandler_update_price - } else { - return err - } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_update_user_territory_life); err == nil { - ExtrinsicsName[callIndex] = ExtName_StorageHandler_update_user_territory_life + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_expanding_territory); err == nil { + ExtrinsicsName[callIndex] = ExtName_StorageHandler_expanding_territory } else { return err } - // if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_update_user_life); err == nil { - // ExtrinsicsName[callIndex] = ExtName_StorageHandler_update_user_life - // } else { - // return err - // } if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_mint_territory); err == nil { ExtrinsicsName[callIndex] = ExtName_StorageHandler_mint_territory } else { return err } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_expanding_territory); err == nil { - ExtrinsicsName[callIndex] = ExtName_StorageHandler_expanding_territory + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_reactivate_territory); err == nil { + ExtrinsicsName[callIndex] = ExtName_StorageHandler_reactivate_territory } else { return err } @@ -1916,8 +1902,8 @@ func (c *ChainClient) InitExtrinsicsName() error { } else { return err } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_territory_rename); err == nil { - ExtrinsicsName[callIndex] = ExtName_StorageHandler_territory_rename + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_territory_consignment); err == nil { + ExtrinsicsName[callIndex] = ExtName_StorageHandler_territory_consignment } else { return err } @@ -1926,33 +1912,23 @@ func (c *ChainClient) InitExtrinsicsName() error { } else { return err } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_reactivate_territory); err == nil { - ExtrinsicsName[callIndex] = ExtName_StorageHandler_reactivate_territory - } else { - return err - } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_territory_consignment); err == nil { - ExtrinsicsName[callIndex] = ExtName_StorageHandler_territory_consignment - } else { - return err - } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_cancel_consignment); err == nil { - ExtrinsicsName[callIndex] = ExtName_StorageHandler_cancel_consignment + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_territory_rename); err == nil { + ExtrinsicsName[callIndex] = ExtName_StorageHandler_territory_rename } else { return err } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_buy_consignment); err == nil { - ExtrinsicsName[callIndex] = ExtName_StorageHandler_buy_consignment + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_update_expired_exec); err == nil { + ExtrinsicsName[callIndex] = ExtName_StorageHandler_update_expired_exec } else { return err } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_cancel_purchase_action); err == nil { - ExtrinsicsName[callIndex] = ExtName_StorageHandler_cancel_purchase_action + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_update_price); err == nil { + ExtrinsicsName[callIndex] = ExtName_StorageHandler_update_price } else { return err } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_update_expired_exec); err == nil { - ExtrinsicsName[callIndex] = ExtName_StorageHandler_update_expired_exec + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_StorageHandler_update_user_territory_life); err == nil { + ExtrinsicsName[callIndex] = ExtName_StorageHandler_update_user_territory_life } else { return err } @@ -2185,11 +2161,6 @@ func (c *ChainClient) InitExtrinsicsName() error { } // Treasury - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Treasury_approve_proposal); err == nil { - ExtrinsicsName[callIndex] = ExtName_Treasury_approve_proposal - } else { - return err - } if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Treasury_check_status); err == nil { ExtrinsicsName[callIndex] = ExtName_Treasury_check_status } else { @@ -2200,16 +2171,6 @@ func (c *ChainClient) InitExtrinsicsName() error { } else { return err } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Treasury_propose_spend); err == nil { - ExtrinsicsName[callIndex] = ExtName_Treasury_propose_spend - } else { - return err - } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Treasury_reject_proposal); err == nil { - ExtrinsicsName[callIndex] = ExtName_Treasury_reject_proposal - } else { - return err - } if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Treasury_remove_approval); err == nil { ExtrinsicsName[callIndex] = ExtName_Treasury_remove_approval } else { @@ -2350,7 +2311,6 @@ func (c *ChainClient) InitExtrinsicsNameForMiner() error { } else { return err } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_FileBank_transfer_report); err == nil { ExtrinsicsName[callIndex] = ExtName_FileBank_transfer_report } else { @@ -2358,6 +2318,21 @@ func (c *ChainClient) InitExtrinsicsNameForMiner() error { } // Sminer + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Sminer_decrease_declaration_space); err == nil { + ExtrinsicsName[callIndex] = ExtName_Sminer_decrease_declaration_space + } else { + return err + } + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Sminer_faucet); err == nil { + ExtrinsicsName[callIndex] = ExtName_Sminer_faucet + } else { + return err + } + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Sminer_faucet_top_up); err == nil { + ExtrinsicsName[callIndex] = ExtName_Sminer_faucet_top_up + } else { + return err + } if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Sminer_increase_collateral); err == nil { ExtrinsicsName[callIndex] = ExtName_Sminer_increase_collateral } else { @@ -2403,18 +2378,13 @@ func (c *ChainClient) InitExtrinsicsNameForMiner() error { } else { return err } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Sminer_set_facuet_whitelist); err == nil { - ExtrinsicsName[callIndex] = ExtName_Sminer_set_facuet_whitelist - } else { - return err - } if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Sminer_update_beneficiary); err == nil { ExtrinsicsName[callIndex] = ExtName_Sminer_update_beneficiary } else { return err } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Sminer_update_peer_id); err == nil { - ExtrinsicsName[callIndex] = ExtName_Sminer_update_peer_id + if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_Sminer_update_endpoint); err == nil { + ExtrinsicsName[callIndex] = ExtName_Sminer_update_endpoint } else { return err } @@ -2440,16 +2410,6 @@ func (c *ChainClient) InitExtrinsicsNameForOSS() error { ExtrinsicsName = make(map[types.CallIndex]string, 0) // FileBank - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_FileBank_create_bucket); err == nil { - ExtrinsicsName[callIndex] = ExtName_FileBank_create_bucket - } else { - return err - } - if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_FileBank_delete_bucket); err == nil { - ExtrinsicsName[callIndex] = ExtName_FileBank_delete_bucket - } else { - return err - } if callIndex, err := c.GetMetadata().FindCallIndex(ExtName_FileBank_delete_file); err == nil { ExtrinsicsName[callIndex] = ExtName_FileBank_delete_file } else { diff --git a/chain/file_bank.go b/chain/file_bank.go index f29482f..51a4ecd 100755 --- a/chain/file_bank.go +++ b/chain/file_bank.go @@ -12,88 +12,13 @@ import ( "log" "math/big" "path/filepath" - "strings" - "time" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types/codec" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" "github.com/pkg/errors" ) -// QueryBucket query user's bucket information -// - accountID: user account -// - bucketName: bucket name -// - block: block number, less than 0 indicates the latest block -// -// Return: -// - BucketInfo: bucket info -// - error: error message -func (c *ChainClient) QueryBucket(accountID []byte, bucketName string, block int32) (BucketInfo, error) { - if !c.GetRpcState() { - err := c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [st] [%s.%s] %s", c.GetCurrentRpcAddr(), FileBank, Bucket, ERR_RPC_CONNECTION.Error()) - return BucketInfo{}, err - } - } - - defer func() { - if err := recover(); err != nil { - log.Println(utils.RecoverError(err)) - } - }() - - var data BucketInfo - - acc, err := types.NewAccountID(accountID) - if err != nil { - return data, errors.Wrap(err, "[NewAccountID]") - } - - owner, err := codec.Encode(*acc) - if err != nil { - return data, errors.Wrap(err, "[EncodeToBytes]") - } - - name, err := codec.Encode(bucketName) - if err != nil { - return data, errors.Wrap(err, "[Encode]") - } - - key, err := types.CreateStorageKey(c.metadata, FileBank, Bucket, owner, name) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [st] [%s.%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), FileBank, Bucket, err) - return data, err - } - if block < 0 { - ok, err := c.api.RPC.State.GetStorageLatest(key, &data) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [st] [%s.%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), FileBank, Bucket, err) - c.SetRpcState(false) - return data, err - } - if !ok { - return data, ERR_RPC_EMPTY_VALUE - } - return data, nil - } - blockhash, err := c.api.RPC.Chain.GetBlockHash(uint64(block)) - if err != nil { - return data, err - } - ok, err := c.api.RPC.State.GetStorage(key, &data, blockhash) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [st] [%s.%s] GetStorage: %v", c.GetCurrentRpcAddr(), FileBank, Bucket, err) - c.SetRpcState(false) - return data, err - } - if !ok { - return data, ERR_RPC_EMPTY_VALUE - } - return data, nil -} - // QueryDealMap query file storage order // - fid: file identification // - block: block number, less than 0 indicates the latest block @@ -444,81 +369,6 @@ func (c *ChainClient) QueryAllRestoralOrder(block int32) ([]RestoralOrderInfo, e return result, nil } -// QueryAllBucketName query user's all bucket names -// - accountID: user account -// - block: block number, less than 0 indicates the latest block -// -// Return: -// - []string: all bucket names -// - error: error message -func (c *ChainClient) QueryAllBucketName(accountID []byte, block int32) ([]string, error) { - if !c.GetRpcState() { - err := c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [st] [%s.%s] %s", c.GetCurrentRpcAddr(), FileBank, UserBucketList, ERR_RPC_CONNECTION.Error()) - return []string{}, err - } - } - - defer func() { - if err := recover(); err != nil { - log.Println(utils.RecoverError(err)) - } - }() - - var data []types.Bytes - - acc, err := types.NewAccountID(accountID) - if err != nil { - return nil, errors.Wrap(err, "[NewAccountID]") - } - - owner, err := codec.Encode(*acc) - if err != nil { - return nil, errors.Wrap(err, "[EncodeToBytes]") - } - - key, err := types.CreateStorageKey(c.metadata, FileBank, UserBucketList, owner) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [st] [%s.%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), FileBank, UserBucketList, err) - return nil, err - } - if block < 0 { - ok, err := c.api.RPC.State.GetStorageLatest(key, &data) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [st] [%s.%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), FileBank, UserBucketList, err) - c.SetRpcState(false) - return nil, err - } - if !ok { - return []string{}, ERR_RPC_EMPTY_VALUE - } - value := make([]string, len(data)) - for i := 0; i < len(data); i++ { - value[i] = string(data[i]) - } - return value, nil - } - blockhash, err := c.api.RPC.Chain.GetBlockHash(uint64(block)) - if err != nil { - return nil, err - } - ok, err := c.api.RPC.State.GetStorage(key, &data, blockhash) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [st] [%s.%s] GetStorage: %v", c.GetCurrentRpcAddr(), FileBank, UserBucketList, err) - c.SetRpcState(false) - return nil, err - } - if !ok { - return []string{}, ERR_RPC_EMPTY_VALUE - } - value := make([]string, len(data)) - for i := 0; i < len(data); i++ { - value[i] = string(data[i]) - } - return value, nil -} - // QueryUserHoldFileList query user's all files // - accountID: user account // - block: block number, less than 0 indicates the latest block @@ -664,7 +514,6 @@ func (c *ChainClient) QueryUserFidList(accountID []byte, block int32) ([]string, // PlaceStorageOrder place an order for storage file // - fid: file identification // - file_name: file name -// - bucket_name: bucket name // - territory_name: territory name // - segment: segment info // - owner: account of the file owner @@ -673,7 +522,7 @@ func (c *ChainClient) QueryUserFidList(accountID []byte, block int32) ([]string, // Return: // - string: block hash // - error: error message -func (c *ChainClient) PlaceStorageOrder(fid, file_name, bucket_name, territory_name string, segment []SegmentDataInfo, owner []byte, file_size uint64) (string, error) { +func (c *ChainClient) PlaceStorageOrder(fid, file_name, territory_name string, segment []SegmentDataInfo, owner []byte, file_size uint64) (string, error) { var err error var segmentList = make([]SegmentList, len(segment)) var user UserBrief @@ -697,7 +546,6 @@ func (c *ChainClient) PlaceStorageOrder(fid, file_name, bucket_name, territory_n return "", err } user.User = *acc - user.BucketName = types.NewBytes([]byte(bucket_name)) user.FileName = types.NewBytes([]byte(file_name)) user.TerriortyName = types.NewBytes([]byte(territory_name)) return c.UploadDeclaration(fid, segmentList, user, file_size) @@ -722,129 +570,42 @@ func (c *ChainClient) UploadDeclaration(fid string, segment []SegmentList, user } }() - var ( - blockhash string - hash FileHash - accountInfo types.AccountInfo - ) + var hash FileHash + if len(fid) != FileHashLen { - return blockhash, errors.New("invalid filehash") + return "", errors.New("invalid filehash") } if filesize <= 0 { - return blockhash, errors.New("invalid filesize") + return "", errors.New("invalid filesize") } for i := 0; i < len(hash); i++ { hash[i] = types.U8(fid[i]) } - call, err := types.NewCall(c.metadata, ExtName_FileBank_upload_declaration, hash, segment, user, types.NewU128(*new(big.Int).SetUint64(filesize))) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_upload_declaration, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_upload_declaration, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_FileBank_upload_declaration, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_FileBank_upload_declaration, hash, segment, user, types.NewU128(*new(big.Int).SetUint64(filesize))) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_upload_declaration, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - keyStr, _ := utils.NumsToByteStr(key, map[string]bool{}) - return blockhash, fmt.Errorf( - "chain rpc.state.GetStorageLatest[%v]: %v", - keyStr, - ERR_RPC_EMPTY_VALUE, - ) - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_upload_declaration, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_upload_declaration, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_FileBank_upload_declaration) if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_upload_declaration, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_upload_declaration, err) - c.SetRpcState(false) - return blockhash, err - } + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_upload_declaration, err) } - defer sub.Unsubscribe() - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_FileBank_upload_declaration, FileBankUploadDeclaration, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } -// CreateBucket create a bucket for owner -// - owner: bucket owner account -// - bucketName: bucket name +// DeleteFile delete a bucket for owner +// - owner: file owner account +// - fid: file identification // // Return: // - string: block hash // - error: error message // // Note: -// - cannot create a bucket that already exists // - if you are not the owner, the owner account must be authorised to you -func (c *ChainClient) CreateBucket(owner []byte, bucketName string) (string, error) { +func (c *ChainClient) DeleteFile(owner []byte, fid string) (string, error) { <-c.tradeCh defer func() { c.tradeCh <- true @@ -853,104 +614,86 @@ func (c *ChainClient) CreateBucket(owner []byte, bucketName string) (string, err } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) + if len(fid) != FileHashLen { + return "", errors.New("invalid fid") + } acc, err := types.NewAccountID(owner) if err != nil { - return blockhash, errors.Wrap(err, "[NewAccountID]") + return "", errors.Wrap(err, "[NewAccountID]") } - call, err := types.NewCall(c.metadata, ExtName_FileBank_create_bucket, *acc, types.NewBytes([]byte(bucketName))) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_create_bucket, err) - return blockhash, err + var fhash FileHash + for i := 0; i < len(fid); i++ { + fhash[i] = types.U8(fid[i]) } - ext := types.NewExtrinsic(call) + newcall, err := types.NewCall(c.metadata, ExtName_FileBank_delete_file, *acc, fhash) + if err != nil { + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_delete_file, err) + } - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_FileBank_delete_file) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_create_bucket, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_delete_file, err) } - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_FileBank_create_bucket, ERR_RPC_CONNECTION.Error()) - return blockhash, err + return blockhash, nil +} + +// TransferReport is used by miners to report that a file has been transferred +// - index: index of the file fragment +// - fid: file identification +// +// Return: +// - string: block hash +// - error: error message +// +// Note: +// - for storage miner use only +func (c *ChainClient) TransferReport(index uint8, fid string) (string, error) { + <-c.tradeCh + defer func() { + c.tradeCh <- true + if err := recover(); err != nil { + log.Println(utils.RecoverError(err)) } - } + }() - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_create_bucket, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE + if index <= 0 || int(index) > (DataShards+ParShards) { + return "", errors.New("invalid index") } - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + var fhash FileHash + + for j := 0; j < len(fid); j++ { + fhash[j] = types.U8(fid[j]) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + newcall, err := types.NewCall(c.metadata, ExtName_FileBank_transfer_report, types.NewU8(index), fhash) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_create_bucket, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_transfer_report, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_FileBank_transfer_report) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_create_bucket, err) - c.SetRpcState(false) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_transfer_report, err) } - defer sub.Unsubscribe() - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_FileBank_create_bucket, FileBankCreateBucket, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } -// DeleteBucket delete a bucket for owner -// - owner: bucket owner account -// - bucketName: bucket name +// GenerateRestoralOrder generate restoral orders for file fragment +// - fid: file identification +// - fragmentHash: fragment hash // // Return: // - string: block hash // - error: error message // // Note: -// - if you are not the owner, the owner account must be authorised to you -func (c *ChainClient) DeleteBucket(owner []byte, bucketName string) (string, error) { +// - for storage miner use only +func (c *ChainClient) GenerateRestoralOrder(fid, fragmentHash string) (string, error) { <-c.tradeCh defer func() { c.tradeCh <- true @@ -959,104 +702,48 @@ func (c *ChainClient) DeleteBucket(owner []byte, bucketName string) (string, err } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - acc, err := types.NewAccountID(owner) - if err != nil { - return blockhash, errors.Wrap(err, "[NewAccountID]") - } - - call, err := types.NewCall(c.metadata, ExtName_FileBank_delete_bucket, *acc, types.NewBytes([]byte(bucketName))) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_delete_bucket, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) + var rooth FileHash + var fragh FileHash - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_delete_bucket, err) - return blockhash, err + if len(fid) != FileHashLen { + return "", errors.New("invalid file hash") } - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_FileBank_delete_bucket, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } + if len(fragmentHash) != FileHashLen { + return "", errors.New("invalid fragment hash") } - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_delete_bucket, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE + for i := 0; i < len(fid); i++ { + rooth[i] = types.U8(fid[i]) } - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + for i := 0; i < len(fragmentHash); i++ { + fragh[i] = types.U8(fragmentHash[i]) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + newcall, err := types.NewCall(c.metadata, ExtName_FileBank_generate_restoral_order, rooth, fragh) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_delete_bucket, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_generate_restoral_order, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_FileBank_generate_restoral_order) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_delete_bucket, err) - c.SetRpcState(false) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_generate_restoral_order, err) } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_FileBank_delete_bucket, FileBankDeleteBucket, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } -// DeleteFile delete a bucket for owner -// - owner: file owner account -// - fid: file identification +// ClaimRestoralOrder claim a restoral order +// - fragmentHash: fragment hash // // Return: // - string: block hash // - error: error message // // Note: -// - if you are not the owner, the owner account must be authorised to you -func (c *ChainClient) DeleteFile(owner []byte, fid string) (string, error) { +// - for storage miner use only +func (c *ChainClient) ClaimRestoralOrder(fragmentHash string) (string, error) { <-c.tradeCh defer func() { c.tradeCh <- true @@ -1065,483 +752,26 @@ func (c *ChainClient) DeleteFile(owner []byte, fid string) (string, error) { } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) + if len(fragmentHash) != FileHashLen { + return "", errors.New("invalid fragment hash") + } - if len(fid) != FileHashLen { - return "", errors.New("invalid fid") + var fragh FileHash + for i := 0; i < len(fragmentHash); i++ { + fragh[i] = types.U8(fragmentHash[i]) } - acc, err := types.NewAccountID(owner) + newcall, err := types.NewCall(c.metadata, ExtName_FileBank_claim_restoral_order, fragh) if err != nil { - return blockhash, errors.Wrap(err, "[NewAccountID]") + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_order, err) } - var fhash FileHash - for i := 0; i < len(fid); i++ { - fhash[i] = types.U8(fid[i]) - } - - call, err := types.NewCall(c.metadata, ExtName_FileBank_delete_file, *acc, fhash) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_delete_file, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_delete_file, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_FileBank_delete_file, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_delete_file, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_delete_file, err) - return blockhash, err - } - - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_FileBank_claim_restoral_order) if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_delete_file, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_delete_file, err) - c.SetRpcState(false) - return blockhash, err - } + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_order, err) } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_FileBank_delete_file, FileBankDeleteFile, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } -} - -// TransferReport is used by miners to report that a file has been transferred -// - index: index of the file fragment -// - fid: file identification -// -// Return: -// - string: block hash -// - error: error message -// -// Note: -// - for storage miner use only -func (c *ChainClient) TransferReport(index uint8, fid string) (string, error) { - <-c.tradeCh - defer func() { - c.tradeCh <- true - if err := recover(); err != nil { - log.Println(utils.RecoverError(err)) - } - }() - - var ( - blockhash string - accountInfo types.AccountInfo - ) - - if index <= 0 || int(index) > (DataShards+ParShards) { - return "", errors.New("invalid index") - } - - var fhash FileHash - - for j := 0; j < len(fid); j++ { - fhash[j] = types.U8(fid[j]) - } - - call, err := types.NewCall(c.metadata, ExtName_FileBank_transfer_report, types.NewU8(index), fhash) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_transfer_report, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_transfer_report, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_FileBank_transfer_report, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_transfer_report, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_transfer_report, err) - return blockhash, err - } - - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_transfer_report, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_transfer_report, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_FileBank_transfer_report, FileBankTransferReport, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } -} - -// GenerateRestoralOrder generate restoral orders for file fragment -// - fid: file identification -// - fragmentHash: fragment hash -// -// Return: -// - string: block hash -// - error: error message -// -// Note: -// - for storage miner use only -func (c *ChainClient) GenerateRestoralOrder(fid, fragmentHash string) (string, error) { - <-c.tradeCh - defer func() { - c.tradeCh <- true - if err := recover(); err != nil { - log.Println(utils.RecoverError(err)) - } - }() - - var ( - blockhash string - accountInfo types.AccountInfo - ) - - var rooth FileHash - var fragh FileHash - - if len(fid) != FileHashLen { - return blockhash, errors.New("invalid file hash") - } - - if len(fragmentHash) != FileHashLen { - return blockhash, errors.New("invalid fragment hash") - } - - for i := 0; i < len(fid); i++ { - rooth[i] = types.U8(fid[i]) - } - - for i := 0; i < len(fragmentHash); i++ { - fragh[i] = types.U8(fragmentHash[i]) - } - - call, err := types.NewCall(c.metadata, ExtName_FileBank_generate_restoral_order, rooth, fragh) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_generate_restoral_order, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_generate_restoral_order, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_FileBank_generate_restoral_order, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_generate_restoral_order, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_generate_restoral_order, err) - return blockhash, err - } - - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_generate_restoral_order, err) - c.SetRpcState(false) - return blockhash, err - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_FileBank_generate_restoral_order, FileBankGenerateRestoralOrder, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } -} - -// ClaimRestoralOrder claim a restoral order -// - fragmentHash: fragment hash -// -// Return: -// - string: block hash -// - error: error message -// -// Note: -// - for storage miner use only -func (c *ChainClient) ClaimRestoralOrder(fragmentHash string) (string, error) { - <-c.tradeCh - defer func() { - c.tradeCh <- true - if err := recover(); err != nil { - log.Println(utils.RecoverError(err)) - } - }() - - var ( - blockhash string - accountInfo types.AccountInfo - ) - - if len(fragmentHash) != FileHashLen { - return blockhash, errors.New("invalid fragment hash") - } - - var fragh FileHash - for i := 0; i < len(fragmentHash); i++ { - fragh[i] = types.U8(fragmentHash[i]) - } - - call, err := types.NewCall(c.metadata, ExtName_FileBank_claim_restoral_order, fragh) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_order, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_order, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_order, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_order, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_order, err) - return blockhash, err - } - - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_order, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_order, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_FileBank_claim_restoral_order, FileBankClaimRestoralOrder, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // ClaimRestoralNoExistOrder claim the restoral order of an exited storage miner @@ -1564,25 +794,20 @@ func (c *ChainClient) ClaimRestoralNoExistOrder(puk []byte, fid, fragmentHash st } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - acc, err := types.NewAccountID(puk) if err != nil { - return blockhash, errors.Wrap(err, "[NewAccountID]") + return "", errors.Wrap(err, "[NewAccountID]") } var rooth FileHash var fragh FileHash if len(fid) != FileHashLen { - return blockhash, errors.New("invalid file hash") + return "", errors.New("invalid file hash") } if len(fragmentHash) != FileHashLen { - return blockhash, errors.New("invalid fragment hash") + return "", errors.New("invalid fragment hash") } for i := 0; i < len(fid); i++ { @@ -1593,94 +818,17 @@ func (c *ChainClient) ClaimRestoralNoExistOrder(puk []byte, fid, fragmentHash st fragh[i] = types.U8(fragmentHash[i]) } - call, err := types.NewCall(c.metadata, ExtName_FileBank_claim_restoral_noexist_order, *acc, rooth, fragh) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_noexist_order, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_noexist_order, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_noexist_order, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_FileBank_claim_restoral_noexist_order, *acc, rooth, fragh) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_noexist_order, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_noexist_order, err) } - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_FileBank_claim_restoral_noexist_order) if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_noexist_order, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_noexist_order, err) - c.SetRpcState(false) - return blockhash, err - } + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_claim_restoral_noexist_order, err) } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_FileBank_claim_restoral_noexist_order, FileBankClaimRestoralOrder, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // RestoralOrderComplete submits the restored completed order @@ -1701,110 +849,27 @@ func (c *ChainClient) RestoralOrderComplete(fragmentHash string) (string, error) } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - var fragh FileHash if len(fragmentHash) != FileHashLen { - return blockhash, errors.New("invalid fragment hash") + return "", errors.New("invalid fragment hash") } for i := 0; i < len(fragmentHash); i++ { fragh[i] = types.U8(fragmentHash[i]) } - call, err := types.NewCall(c.metadata, ExtName_FileBank_restoral_order_complete, fragh) + newcall, err := types.NewCall(c.metadata, ExtName_FileBank_restoral_order_complete, fragh) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_restoral_order_complete, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_restoral_order_complete, err) } - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_restoral_order_complete, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_FileBank_restoral_order_complete, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_restoral_order_complete, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - ext := types.NewExtrinsic(call) - - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_FileBank_restoral_order_complete) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_restoral_order_complete, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_restoral_order_complete, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_restoral_order_complete, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_restoral_order_complete, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_FileBank_restoral_order_complete, FileBankRecoveryCompleted, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // CertIdleSpace authenticates idle file to the chain @@ -1828,100 +893,17 @@ func (c *ChainClient) CertIdleSpace(spaceProofInfo SpaceProofInfo, teeSignWithAc } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - call, err := types.NewCall(c.metadata, ExtName_FileBank_cert_idle_space, spaceProofInfo, teeSignWithAcc, teeSign, teePuk) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_cert_idle_space, err) - return blockhash, err - } - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_cert_idle_space, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_FileBank_cert_idle_space, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_cert_idle_space, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - ext := types.NewExtrinsic(call) - - // Sign the transaction - err = ext.Sign(c.keyring, o) + newcall, err := types.NewCall(c.metadata, ExtName_FileBank_cert_idle_space, spaceProofInfo, teeSignWithAcc, teeSign, teePuk) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_cert_idle_space, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_cert_idle_space, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_FileBank_cert_idle_space) if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_cert_idle_space, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_cert_idle_space, err) - c.SetRpcState(false) - return blockhash, err - } + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_cert_idle_space, err) } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_FileBank_cert_idle_space, FileBankIdleSpaceCert, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // ReplaceIdleSpace replaces idle files with service files @@ -1945,100 +927,17 @@ func (c *ChainClient) ReplaceIdleSpace(spaceProofInfo SpaceProofInfo, teeSignWit } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - call, err := types.NewCall(c.metadata, ExtName_FileBank_replace_idle_space, spaceProofInfo, teeSignWithAcc, teeSign, teePuk) + newcall, err := types.NewCall(c.metadata, ExtName_FileBank_replace_idle_space, spaceProofInfo, teeSignWithAcc, teeSign, teePuk) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_replace_idle_space, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_replace_idle_space, err) } - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_FileBank_replace_idle_space) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_replace_idle_space, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_replace_idle_space, err) } - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_FileBank_replace_idle_space, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_replace_idle_space, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - ext := types.NewExtrinsic(call) - - // Sign the transaction - err = ext.Sign(c.keyring, o) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_replace_idle_space, err) - return blockhash, err - } - - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_replace_idle_space, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_replace_idle_space, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_FileBank_replace_idle_space, FileBankReplaceIdleSpace, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // CalculateReport report file tag calculation completed @@ -2060,100 +959,17 @@ func (c *ChainClient) CalculateReport(teeSig types.Bytes, tagSigInfo TagSigInfo) } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - call, err := types.NewCall(c.metadata, ExtName_FileBank_calculate_report, teeSig, tagSigInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_calculate_report, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_calculate_report, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_FileBank_calculate_report, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_FileBank_calculate_report, teeSig, tagSigInfo) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_calculate_report, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_calculate_report, err) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_FileBank_calculate_report) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_calculate_report, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_calculate_report, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_calculate_report, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_calculate_report, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_FileBank_calculate_report, FileBankCalculateReport, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // TerritoryFileDelivery transfer files to another territory @@ -2173,89 +989,20 @@ func (c *ChainClient) TerritoryFileDelivery(user []byte, fid string, target_terr } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - acc, err := types.NewAccountID(user) if err != nil { - return blockhash, errors.Wrap(err, "[NewAccountID]") - } - - call, err := types.NewCall(c.metadata, ExtName_FileBank_territory_file_delivery, *acc, types.NewBytes([]byte(fid)), types.NewBytes([]byte(target_territory))) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_territory_file_delivery, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_territory_file_delivery, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_FileBank_territory_file_delivery, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_territory_file_delivery, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE + return "", errors.Wrap(err, "[NewAccountID]") } - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) + newcall, err := types.NewCall(c.metadata, ExtName_FileBank_territory_file_delivery, *acc, types.NewBytes([]byte(fid)), types.NewBytes([]byte(target_territory))) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_territory_file_delivery, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_territory_file_delivery, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_FileBank_territory_file_delivery) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_territory_file_delivery, err) - c.SetRpcState(false) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_FileBank_territory_file_delivery, err) } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_FileBank_territory_file_delivery, FileBankTerritorFileDelivery, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } diff --git a/chain/parse_block.go b/chain/parse_block.go index ad7f5e1..834eddb 100644 --- a/chain/parse_block.go +++ b/chain/parse_block.go @@ -15,10 +15,10 @@ import ( "strconv" "strings" + "github.com/AstaFrode/go-substrate-rpc-client/v4/registry/parser" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types/codec" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/registry/parser" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/pkg/errors" "github.com/vedhavyas/go-subkey/v2/scale" @@ -78,6 +78,9 @@ func (c *ChainClient) ParseBlockData(blocknumber uint64) (BlockData, error) { for _, e := range events { if e.Phase.IsApplyExtrinsic { + if strings.Contains(e.Name, "MultiBlockMigrations.") { + continue + } if name, ok = ExtrinsicsName[block.Block.Extrinsics[e.Phase.AsApplyExtrinsic].Method.CallIndex]; ok { if extrinsicIndex >= len(blockdata.Extrinsics) { return blockdata, errors.New("The number of extrinsics hashes does not equal the number of extrinsics") @@ -172,34 +175,6 @@ func (c *ChainClient) ParseBlockData(blocknumber uint64) (BlockData, error) { Owner: acc, Fid: fid, }) - case FileBankCreateBucket: - acc, err := ParseAccountFromEvent(e) - if err != nil { - return blockdata, err - } - bucketname, err := ParseStringFromEvent(e) - if err != nil { - return blockdata, err - } - blockdata.CreateBucketInfo = append(blockdata.CreateBucketInfo, CreateBucketInfo{ - ExtrinsicHash: blockdata.Extrinsics[extrinsicIndex].Hash, - Owner: acc, - BucketName: bucketname, - }) - case FileBankDeleteBucket: - acc, err := ParseAccountFromEvent(e) - if err != nil { - return blockdata, err - } - bucketname, err := ParseStringFromEvent(e) - if err != nil { - return blockdata, err - } - blockdata.DeleteBucketInfo = append(blockdata.DeleteBucketInfo, DeleteBucketInfo{ - ExtrinsicHash: blockdata.Extrinsics[extrinsicIndex].Hash, - Owner: acc, - BucketName: bucketname, - }) case StorageHandlerMintTerritory: token, name, size, err := parseTerritoryInfoFromEvent(e) if err != nil { @@ -346,28 +321,6 @@ func (c *ChainClient) ParseBlockData(blocknumber uint64) (BlockData, error) { break } } - case ExtName_FileBank_delete_bucket: - for m := 0; m < len(blockdata.DeleteBucketInfo); m++ { - if blockdata.DeleteBucketInfo[m].ExtrinsicHash == blockdata.Extrinsics[extrinsicIndex].Hash { - if len(blockdata.DeleteBucketInfo) == 1 { - blockdata.DeleteBucketInfo = nil - } else { - blockdata.DeleteBucketInfo = append(blockdata.DeleteBucketInfo[:m], blockdata.DeleteBucketInfo[m+1:]...) - } - break - } - } - case ExtName_FileBank_create_bucket: - for m := 0; m < len(blockdata.CreateBucketInfo); m++ { - if blockdata.CreateBucketInfo[m].ExtrinsicHash == blockdata.Extrinsics[extrinsicIndex].Hash { - if len(blockdata.CreateBucketInfo) == 1 { - blockdata.CreateBucketInfo = nil - } else { - blockdata.CreateBucketInfo = append(blockdata.CreateBucketInfo[:m], blockdata.CreateBucketInfo[m+1:]...) - } - break - } - } case ExtName_Sminer_regnstk: for m := 0; m < len(blockdata.MinerReg); m++ { if blockdata.MinerReg[m].ExtrinsicHash == blockdata.Extrinsics[extrinsicIndex].Hash { diff --git a/chain/pattern.go b/chain/pattern.go index d8b02c6..d445f04 100644 --- a/chain/pattern.go +++ b/chain/pattern.go @@ -10,7 +10,7 @@ package chain import ( "time" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" "github.com/pkg/errors" ) @@ -393,7 +393,6 @@ type FragmentInfo struct { type UserBrief struct { User types.AccountID FileName types.Bytes - BucketName types.Bytes TerriortyName types.Bytes } @@ -430,7 +429,7 @@ type KeyOwnerParam struct { type MinerInfo struct { BeneficiaryAccount types.AccountID StakingAccount types.AccountID - PeerId PeerId + Endpoint types.Bytes Collaterals types.U128 Debt types.U128 State types.Bytes // positive, exit, frozen, lock @@ -458,17 +457,6 @@ type RewardOrder struct { LastReceiveBlock types.U32 } -// StorageHandler -// type UserSpaceInfo struct { -// TotalSpace types.U128 -// UsedSpace types.U128 -// LockedSpace types.U128 -// RemainingSpace types.U128 -// Start types.U32 -// Deadline types.U32 -// State types.Bytes -// } - type TerritoryInfo struct { Token types.H256 TotalSpace types.U128 @@ -480,16 +468,6 @@ type TerritoryInfo struct { State types.U8 //0: Active 1: Frozen 2: Expired 3: OnConsignment } -// type OrderInfo struct { -// TerritoryName [TerritoryKeyLen]types.U8 -// Pay types.U128 -// GibCount types.U32 -// Days types.U32 -// Expired types.U32 -// TargetAcc types.AccountID -// OrderType types.U8 -// } - type ConsignmentInfo struct { User types.AccountID Price types.U128 @@ -717,8 +695,6 @@ type BlockData struct { TransferInfo []TransferInfo UploadDecInfo []UploadDecInfo DeleteFileInfo []DeleteFileInfo - CreateBucketInfo []CreateBucketInfo - DeleteBucketInfo []DeleteBucketInfo SubmitIdleProve []SubmitIdleProve SubmitServiceProve []SubmitServiceProve SubmitIdleResult []SubmitIdleResult @@ -766,18 +742,6 @@ type MinerRegInfo struct { Account string } -type CreateBucketInfo struct { - ExtrinsicHash string - Owner string - BucketName string -} - -type DeleteBucketInfo struct { - ExtrinsicHash string - Owner string - BucketName string -} - type SubmitIdleProve struct { ExtrinsicHash string Miner string diff --git a/chain/retrieve_event.go b/chain/retrieve_event.go index 6951e4b..2d04927 100644 --- a/chain/retrieve_event.go +++ b/chain/retrieve_event.go @@ -8,7 +8,9 @@ package chain import ( - "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "fmt" + + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" "github.com/pkg/errors" ) @@ -24,12 +26,12 @@ func (c *ChainClient) RetrieveAllEventName(blockhash types.Hash) ([]string, erro return result, nil } -func (c *ChainClient) RetrieveEvent(blockhash types.Hash, extrinsic_name, event_name, signer string) error { +func (c *ChainClient) RetrieveEvent(blockhash types.Hash, extrinsic_name, signer string) error { if len(ExtrinsicsName) <= 0 { return errors.New("please call InitExtrinsicsName method first") } - if len(extrinsic_name) <= 0 || len(event_name) <= 0 { + if len(extrinsic_name) <= 0 { return errors.New("extrinsic_name or event_name is empty") } @@ -53,10 +55,10 @@ func (c *ChainClient) RetrieveEvent(blockhash types.Hash, extrinsic_name, event_ extrinsic_signer string ) for _, e := range events { + if !e.Phase.IsApplyExtrinsic { + continue + } if name == "" { - if !e.Phase.IsApplyExtrinsic { - continue - } name, ok = ExtrinsicsName[block.Block.Extrinsics[e.Phase.AsApplyExtrinsic].Method.CallIndex] if !ok { continue @@ -81,32 +83,32 @@ func (c *ChainClient) RetrieveEvent(blockhash types.Hash, extrinsic_name, event_ case SystemExtrinsicFailed: name = "" if extrinsic_signer == signer { - return errors.New(ERR_Failed) + return errors.New(SystemExtrinsicFailed) } } } - return errors.Errorf("transaction failed: no %s event found", event_name) + return fmt.Errorf("not found extrinsic: %s", extrinsic_name) } func (c *ChainClient) RetrieveExtrinsicsAndEvents(blockhash types.Hash) ([]string, map[string][]string, error) { var systemEvents = make([]string, 0) var extrinsicsEvents = make(map[string][]string, 0) - block, err := c.GetSubstrateAPI().RPC.Chain.GetBlock(blockhash) - if err != nil { - return systemEvents, extrinsicsEvents, err - } + // block, err := c.GetSubstrateAPI().RPC.Chain.GetBlock(blockhash) + // if err != nil { + // return systemEvents, extrinsicsEvents, err + // } events, err := c.eventRetriever.GetEvents(blockhash) if err != nil { return systemEvents, extrinsicsEvents, err } for _, e := range events { if e.Phase.IsApplyExtrinsic { - if name, ok := ExtrinsicsName[block.Block.Extrinsics[e.Phase.AsApplyExtrinsic].Method.CallIndex]; ok { - if extrinsicsEvents[name] == nil { - extrinsicsEvents[name] = make([]string, 0) - } - extrinsicsEvents[name] = append(extrinsicsEvents[name], e.Name) - } + // if name, ok := ExtrinsicsName[block.Block.Extrinsics[e.Phase.AsApplyExtrinsic].Method.CallIndex]; ok { + // if extrinsicsEvents[name] == nil { + // extrinsicsEvents[name] = make([]string, 0) + // } + // extrinsicsEvents[name] = append(extrinsicsEvents[name], e.Name) + // } } else { systemEvents = append(systemEvents, e.Name) } @@ -117,41 +119,41 @@ func (c *ChainClient) RetrieveExtrinsicsAndEvents(blockhash types.Hash) ([]strin func (c *ChainClient) RetrieveEvent_Sminer_Receive(blockhash types.Hash) (Event_Receive, error) { var result Event_Receive - block, err := c.api.RPC.Chain.GetBlock(blockhash) - if err != nil { - return result, err - } + // block, err := c.api.RPC.Chain.GetBlock(blockhash) + // if err != nil { + // return result, err + // } events, err := c.eventRetriever.GetEvents(blockhash) if err != nil { return result, err } - var signer string - var earningsAcc string + // var signer string + // var earningsAcc string for _, e := range events { if e.Phase.IsApplyExtrinsic { - if name, ok := ExtrinsicsName[block.Block.Extrinsics[e.Phase.AsApplyExtrinsic].Method.CallIndex]; ok { - if name == ExtName_Sminer_receive_reward { - switch e.Name { - case SminerReceive: - earningsAcc, _ = ParseAccountFromEvent(e) - result.Acc = earningsAcc - case TransactionPaymentTransactionFeePaid: - signer, _, _ = parseSignerAndFeePaidFromEvent(e) - case EvmAccountMappingTransactionFeePaid: - signer, _, _ = parseSignerAndFeePaidFromEvent(e) - case SystemExtrinsicSuccess: - if signer == c.GetSignatureAcc() { - return result, nil - } - case SystemExtrinsicFailed: - if signer == c.GetSignatureAcc() { - return result, errors.New(ERR_Failed) - } - } - } - } + // if name, ok := ExtrinsicsName[block.Block.Extrinsics[e.Phase.AsApplyExtrinsic].Method.CallIndex]; ok { + // if name == ExtName_Sminer_receive_reward { + // switch e.Name { + // case SminerReceive: + // earningsAcc, _ = ParseAccountFromEvent(e) + // result.Acc = earningsAcc + // case TransactionPaymentTransactionFeePaid: + // signer, _, _ = parseSignerAndFeePaidFromEvent(e) + // case EvmAccountMappingTransactionFeePaid: + // signer, _, _ = parseSignerAndFeePaidFromEvent(e) + // case SystemExtrinsicSuccess: + // if signer == c.GetSignatureAcc() { + // return result, nil + // } + // case SystemExtrinsicFailed: + // if signer == c.GetSignatureAcc() { + // return result, errors.New(ERR_Failed) + // } + // } + // } + // } } } return result, errors.Errorf("failed: no %s event found", SminerReceive) diff --git a/chain/rpc_call.go b/chain/rpc_call.go index fe4f3e8..1799880 100644 --- a/chain/rpc_call.go +++ b/chain/rpc_call.go @@ -11,8 +11,8 @@ import ( "fmt" "log" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" ) // ChainGetBlock get SignedBlock info by block hash diff --git a/chain/scheduler_credit.go b/chain/scheduler_credit.go index 77d17e2..05b91d0 100644 --- a/chain/scheduler_credit.go +++ b/chain/scheduler_credit.go @@ -11,8 +11,8 @@ import ( "fmt" "log" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" ) // QueryCurrentCounters query the validator's credit score diff --git a/chain/session.go b/chain/session.go index 55acf82..e4c99d9 100644 --- a/chain/session.go +++ b/chain/session.go @@ -11,8 +11,8 @@ import ( "fmt" "log" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" ) // QueryValidators query validators account (waiting nodes not included) diff --git a/chain/sminer.go b/chain/sminer.go index e02745b..67d62c6 100755 --- a/chain/sminer.go +++ b/chain/sminer.go @@ -12,12 +12,11 @@ import ( "log" "math/big" "strconv" - "strings" "time" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types/codec" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" "github.com/pkg/errors" ) @@ -642,19 +641,19 @@ func (c *ChainClient) QueryCompleteSnapShot(era uint32, block int32) (uint32, ui return uint32(data.MinerCount), data.TotalPower.Uint64(), nil } -// QueryCompleteMinerSnapShot query CompleteMinerSnapShot +// QueryCompleteMinerSnapShot query the completed challenge snapshots of miners // - puk: account id // - block: block number, less than 0 indicates the latest block // // Return: -// - MinerCompleteInfo: CompleteMinerSnapShot +// - []MinerCompleteInfo: list of completed challenge snapshots // - error: error message -func (c *ChainClient) QueryCompleteMinerSnapShot(puk []byte, block int32) (MinerCompleteInfo, error) { +func (c *ChainClient) QueryCompleteMinerSnapShot(puk []byte, block int32) ([]MinerCompleteInfo, error) { if !c.GetRpcState() { err := c.ReconnectRpc() if err != nil { err = fmt.Errorf("rpc err: [%s] [st] [%s.%s] %s", c.GetCurrentRpcAddr(), Sminer, CompleteMinerSnapShot, ERR_RPC_CONNECTION.Error()) - return MinerCompleteInfo{}, err + return nil, err } } @@ -664,14 +663,9 @@ func (c *ChainClient) QueryCompleteMinerSnapShot(puk []byte, block int32) (Miner } }() - var data MinerCompleteInfo - - param, err := codec.Encode(puk) - if err != nil { - return data, err - } + var data []MinerCompleteInfo - key, err := types.CreateStorageKey(c.metadata, Sminer, CompleteMinerSnapShot, param) + key, err := types.CreateStorageKey(c.metadata, Sminer, CompleteMinerSnapShot, puk) if err != nil { err = fmt.Errorf("rpc err: [%s] [st] [%s.%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), Sminer, CompleteMinerSnapShot, err) return data, err @@ -729,11 +723,6 @@ func (c *ChainClient) IncreaseCollateral(accountID []byte, token string) (string } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - tokens, ok := new(big.Int).SetString(token, 10) if !ok { return "", fmt.Errorf("[IncreaseCollateral] invalid token: %s", token) @@ -741,98 +730,20 @@ func (c *ChainClient) IncreaseCollateral(accountID []byte, token string) (string acc, err := types.NewAccountID(accountID) if err != nil { - return blockhash, errors.Wrap(err, "[NewAccountID]") - } - - call, err := types.NewCall(c.metadata, ExtName_Sminer_increase_collateral, *acc, types.NewUCompact(tokens)) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_collateral, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_collateral, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_collateral, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err = c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_collateral, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", errors.Wrap(err, "[NewAccountID]") } - // Sign the transaction - err = ext.Sign(c.keyring, o) + newcall, err := types.NewCall(c.metadata, ExtName_Sminer_increase_collateral, *acc, types.NewUCompact(tokens)) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_collateral, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_collateral, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Sminer_increase_collateral) if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_collateral, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_collateral, err) - c.SetRpcState(false) - return blockhash, err - } + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_collateral, err) } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Sminer_increase_collateral, SminerIncreaseCollateral, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // IncreaseDeclarationSpace increases the size of space declared on the chain @@ -854,100 +765,17 @@ func (c *ChainClient) IncreaseDeclarationSpace(tibCount uint32) (string, error) } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - call, err := types.NewCall(c.metadata, ExtName_Sminer_increase_declaration_space, types.NewU32(tibCount)) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_declaration_space, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_declaration_space, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_declaration_space, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_declaration_space, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) + newcall, err := types.NewCall(c.metadata, ExtName_Sminer_miner_exit, types.NewU32(tibCount)) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_declaration_space, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_exit, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Sminer_miner_exit) if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_declaration_space, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_increase_declaration_space, err) - c.SetRpcState(false) - return blockhash, err - } + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_exit, err) } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Sminer_increase_declaration_space, SminerIncreaseDeclarationSpace, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // MinerExitPrep pre-exit storage miner @@ -968,108 +796,22 @@ func (c *ChainClient) MinerExitPrep() (string, error) { } }() - var ( - err error - blockhash string - call types.Call - accountInfo types.AccountInfo - ) - acc, err := types.NewAccountID(c.GetSignatureAccPulickey()) if err != nil { - return blockhash, errors.Wrap(err, "[NewAccountID]") - } - - call, err = types.NewCall(c.metadata, ExtName_Sminer_miner_exit, *acc) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_exit, err) - return blockhash, err + return "", errors.Wrap(err, "[NewAccountID]") } - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_exit, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_exit, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_exit, err) - c.SetRpcState(false) - return blockhash, err - } - - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) + newcall, err := types.NewCall(c.metadata, ExtName_Sminer_miner_exit, *acc) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_exit, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_exit, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Sminer_miner_exit) if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_exit, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_exit, err) - c.SetRpcState(false) - return blockhash, err - } + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_exit, err) } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Sminer_miner_exit, SminerMinerExitPrep, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // MinerWithdraw withdraws all staking @@ -1090,100 +832,17 @@ func (c *ChainClient) MinerWithdraw() (string, error) { } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - call, err := types.NewCall(c.metadata, ExtName_Sminer_miner_withdraw) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_withdraw, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_withdraw, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_withdraw, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_withdraw, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) + newcall, err := types.NewCall(c.metadata, ExtName_Sminer_miner_withdraw) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_withdraw, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_withdraw, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Sminer_miner_withdraw) if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_withdraw, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_withdraw, err) - c.SetRpcState(false) - return blockhash, errors.Wrap(err, "[SubmitAndWatchExtrinsic]") - } + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_miner_withdraw, err) } - defer sub.Unsubscribe() - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Sminer_miner_withdraw, SminerWithdraw, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // ReceiveReward to receive rewards @@ -1253,7 +912,6 @@ func (c *ChainClient) ReceiveReward() (string, string, error) { TransactionVersion: c.runtimeVersion.TransactionVersion, } - // Sign the transaction err = ext.Sign(c.keyring, o) if err != nil { err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_receive_reward, err) @@ -1263,23 +921,9 @@ func (c *ChainClient) ReceiveReward() (string, string, error) { // Do the transfer and track the actual status sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, earningsAcc, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_receive_reward, err) - c.SetRpcState(false) - return blockhash, earningsAcc, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_receive_reward, err) - c.SetRpcState(false) - return blockhash, earningsAcc, err - } + err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_receive_reward, err) + c.SetRpcState(false) + return blockhash, earningsAcc, err } defer sub.Unsubscribe() @@ -1325,120 +969,31 @@ func (c *ChainClient) RegisterPoisKey(poisKey PoISKeyInfo, teeSignWithAcc, teeSi } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - call, err := types.NewCall(c.metadata, ExtName_Sminer_register_pois_key, poisKey, teeSignWithAcc, teeSign, teePuk) + newcall, err := types.NewCall(c.metadata, ExtName_Sminer_register_pois_key, teeSignWithAcc, teeSign, teePuk) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_register_pois_key, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_register_pois_key, err) } - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Sminer_register_pois_key) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_register_pois_key, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_register_pois_key, err) } - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Sminer_register_pois_key, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_register_pois_key, err) - c.SetRpcState(false) - return blockhash, err - } - - if !ok { - keyStr, _ := utils.NumsToByteStr(key, map[string]bool{}) - return blockhash, fmt.Errorf( - "chain rpc.state.GetStorageLatest[%v]: %v", - keyStr, - ERR_RPC_EMPTY_VALUE, - ) - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, - } - - // Sign the transaction - err = ext.Sign(c.keyring, o) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_register_pois_key, err) - return blockhash, err - } - - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_register_pois_key, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_register_pois_key, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Sminer_register_pois_key, SminerRegisterPoisKey, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // RegnstkSminer registers as a storage miner, // which is the first stage of storage miner registration. // // - earnings: earnings account -// - addr: address +// - endpoint: communications endpoint // - staking: number of staking, the unit is CESS // - tibCount: the size of declaration space, in TiB // // Return: // - string: block hash // - error: error message -func (c *ChainClient) RegnstkSminer(earnings string, addr []byte, staking uint64, tibCount uint32) (string, error) { +func (c *ChainClient) RegnstkSminer(earnings string, endpoint []byte, staking uint64, tibCount uint32) (string, error) { <-c.tradeCh defer func() { c.tradeCh <- true @@ -1447,127 +1002,34 @@ func (c *ChainClient) RegnstkSminer(earnings string, addr []byte, staking uint64 } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - var pid PeerId - if len(addr) > PeerIdPublicKeyLen { - return blockhash, fmt.Errorf("[RegnstkSminer] addr exceeds %d bytes", PeerIdPublicKeyLen) - } - - for i := 0; i < len(addr); i++ { - pid[i] = types.U8(addr[i]) + if len(endpoint) < 0 { + return "", errors.New("empty endpoint") } pubkey, err := utils.ParsingPublickey(earnings) if err != nil { - return blockhash, errors.Wrap(err, "[DecodeToPub]") + return "", errors.Wrap(err, "[DecodeToPub]") } acc, err := types.NewAccountID(pubkey) if err != nil { - return blockhash, errors.Wrap(err, "[NewAccountID]") + return "", errors.Wrap(err, "[NewAccountID]") } realTokens, ok := new(big.Int).SetString(strconv.FormatUint(staking, 10)+TokenPrecision_CESS, 10) if !ok { - return blockhash, errors.New("[big.Int.SetString]") - } - call, err := types.NewCall(c.metadata, ExtName_Sminer_regnstk, *acc, pid, types.NewU128(*realTokens), types.U32(tibCount)) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err = c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk, err) - c.SetRpcState(false) - return blockhash, err - } - - if !ok { - keyStr, _ := utils.NumsToByteStr(key, map[string]bool{}) - return blockhash, fmt.Errorf( - "chain rpc.state.GetStorageLatest[%v]: %v", - keyStr, - ERR_RPC_EMPTY_VALUE, - ) - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", errors.New("[big.Int.SetString]") } - // Sign the transaction - err = ext.Sign(c.keyring, o) + newcall, err := types.NewCall(c.metadata, ExtName_Sminer_regnstk, *acc, types.NewBytes(endpoint), types.NewU128(*realTokens), types.U32(tibCount)) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Sminer_regnstk) if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk, err) - c.SetRpcState(false) - return blockhash, err - } + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk, err) } - defer sub.Unsubscribe() - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Sminer_regnstk, SminerRegistered, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // RegnstkAssignStaking is registered as a storage miner, unlike RegnstkSminer, @@ -1575,14 +1037,14 @@ func (c *ChainClient) RegnstkSminer(earnings string, addr []byte, staking uint64 // of storage miner registration. // // - earnings: earnings account -// - peerId: peer id +// - endpoint: communications endpoint // - stakingAcc: staking account // - tibCount: the size of declaration space, in TiB // // Return: // - string: block hash // - error: error message -func (c *ChainClient) RegnstkAssignStaking(earnings string, peerId []byte, stakingAcc string, tibCount uint32) (string, error) { +func (c *ChainClient) RegnstkAssignStaking(earnings string, endpoint []byte, stakingAcc string, tibCount uint32) (string, error) { <-c.tradeCh defer func() { c.tradeCh <- true @@ -1591,138 +1053,37 @@ func (c *ChainClient) RegnstkAssignStaking(earnings string, peerId []byte, staki } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - var peerid PeerId - if len(peerId) != PeerIdPublicKeyLen { - return blockhash, fmt.Errorf("invalid peerid: %v", peerId) - } - - for i := 0; i < len(peerid); i++ { - peerid[i] = types.U8(peerId[i]) + if len(endpoint) <= 0 { + return "", errors.New("empty endpoint") } pubkey, err := utils.ParsingPublickey(earnings) if err != nil { - return blockhash, errors.Wrap(err, "[DecodeToPub]") + return "", errors.Wrap(err, "[DecodeToPub]") } beneficiaryacc, err := types.NewAccountID(pubkey) if err != nil { - return blockhash, errors.Wrap(err, "[NewAccountID]") + return "", errors.Wrap(err, "[NewAccountID]") } pubkey, err = utils.ParsingPublickey(stakingAcc) if err != nil { - return blockhash, errors.Wrap(err, "[DecodeToPub]") + return "", errors.Wrap(err, "[DecodeToPub]") } stakingacc, err := types.NewAccountID(pubkey) if err != nil { - return blockhash, errors.Wrap(err, "[NewAccountID]") + return "", errors.Wrap(err, "[NewAccountID]") } - call, err := types.NewCall( - c.metadata, - ExtName_Sminer_regnstk_assign_staking, - *beneficiaryacc, - peerid, - *stakingacc, - types.U32(tibCount), - ) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk_assign_staking, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) + newcall, err := types.NewCall(c.metadata, ExtName_Sminer_regnstk_assign_staking, *beneficiaryacc, types.NewBytes(endpoint), *stakingacc, types.U32(tibCount)) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk_assign_staking, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk_assign_staking, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk_assign_staking, err) } - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Sminer_regnstk_assign_staking) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk_assign_staking, err) - c.SetRpcState(false) - return blockhash, err - } - - if !ok { - keyStr, _ := utils.NumsToByteStr(key, map[string]bool{}) - return blockhash, fmt.Errorf( - "chain rpc.state.GetStorageLatest[%v]: %v", - keyStr, - ERR_RPC_EMPTY_VALUE, - ) - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk_assign_staking, err) } - // Sign the transaction - err = ext.Sign(c.keyring, o) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk_assign_staking, err) - return blockhash, err - } - - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk_assign_staking, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_regnstk_assign_staking, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Sminer_regnstk_assign_staking, SminerRegistered, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // UpdateBeneficiary updates earnings account for storage miner @@ -1741,11 +1102,6 @@ func (c *ChainClient) UpdateBeneficiary(earnings string) (string, error) { } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - puk, err := utils.ParsingPublickey(earnings) if err != nil { return "", err @@ -1753,108 +1109,29 @@ func (c *ChainClient) UpdateBeneficiary(earnings string) (string, error) { acc, err := types.NewAccountID(puk) if err != nil { - return blockhash, errors.Wrap(err, "[NewAccountID]") - } - - call, err := types.NewCall(c.metadata, ExtName_Sminer_update_beneficiary, *acc) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_beneficiary, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_beneficiary, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Sminer_update_beneficiary, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_beneficiary, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", errors.Wrap(err, "[NewAccountID]") } - // Sign the transaction - err = ext.Sign(c.keyring, o) + newcall, err := types.NewCall(c.metadata, ExtName_Sminer_update_beneficiary, *acc) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_beneficiary, err) - return blockhash, err + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_beneficiary, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Sminer_update_beneficiary) if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_beneficiary, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_beneficiary, err) - c.SetRpcState(false) - return blockhash, err - } + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_beneficiary, err) } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Sminer_update_beneficiary, SminerUpdateBeneficiary, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } -// UpdateSminerAddr update address for storage miner -// -// - addr: address +// UpdateSminerEndpoint update address for storage miner +// - endpoint: address // // Return: // - string: block hash // - error: error message -func (c *ChainClient) UpdateSminerAddr(addr []byte) (string, error) { +func (c *ChainClient) UpdateSminerEndpoint(endpoint []byte) (string, error) { <-c.tradeCh defer func() { c.tradeCh <- true @@ -1863,106 +1140,20 @@ func (c *ChainClient) UpdateSminerAddr(addr []byte) (string, error) { } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - var pid PeerId - - if len(addr) > PeerIdPublicKeyLen { - return blockhash, fmt.Errorf("addr exceeds %d bytes", PeerIdPublicKeyLen) - } - - for i := 0; i < len(addr); i++ { - pid[i] = types.U8(addr[i]) - } - - call, err := types.NewCall(c.metadata, ExtName_Sminer_update_peer_id, pid) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_peer_id, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_peer_id, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_Sminer_update_peer_id, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } + if len(endpoint) <= 0 { + return "", errors.New("empty endpoint") } - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_Sminer_update_endpoint, types.NewBytes(endpoint)) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_peer_id, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_endpoint, err) + return "", err } - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_Sminer_update_endpoint) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_peer_id, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_endpoint, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_peer_id, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_Sminer_update_peer_id, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_Sminer_update_peer_id, SminerUpdatePeerId, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } diff --git a/chain/staking.go b/chain/staking.go index 5d6bc5a..ead190a 100755 --- a/chain/staking.go +++ b/chain/staking.go @@ -11,9 +11,9 @@ import ( "fmt" "log" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types/codec" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" "github.com/pkg/errors" ) diff --git a/chain/storage_handler.go b/chain/storage_handler.go index 966dc66..a889b1e 100755 --- a/chain/storage_handler.go +++ b/chain/storage_handler.go @@ -10,12 +10,10 @@ package chain import ( "fmt" "log" - "strings" - "time" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types/codec" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" "github.com/pkg/errors" ) @@ -395,11 +393,6 @@ func (c *ChainClient) MintTerritory(gib_count uint32, territory_name string, day } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - if gib_count == 0 { return "", errors.New("[MintTerritory] invalid gib_count") } @@ -408,95 +401,17 @@ func (c *ChainClient) MintTerritory(gib_count uint32, territory_name string, day return "", errors.New("[MintTerritory] invalid days") } - call, err := types.NewCall(c.metadata, ExtName_StorageHandler_mint_territory, types.NewU32(gib_count), types.NewBytes([]byte(territory_name)), types.NewU32(days)) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_mint_territory, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_mint_territory, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_StorageHandler_mint_territory, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_StorageHandler_mint_territory, types.NewU32(gib_count), types.NewBytes([]byte(territory_name)), types.NewU32(days)) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_mint_territory, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_mint_territory, err) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_StorageHandler_mint_territory) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_mint_territory, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_mint_territory, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_mint_territory, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_mint_territory, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_StorageHandler_mint_territory, StorageHandlerMintTerritory, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // ExpandingTerritory expanding the territory size @@ -515,104 +430,21 @@ func (c *ChainClient) ExpandingTerritory(territory_name string, gib_count uint32 } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - if gib_count == 0 { return "", errors.New("[ExpandingTerritory] invalid gib_count") } - call, err := types.NewCall(c.metadata, ExtName_StorageHandler_expanding_territory, types.NewBytes([]byte(territory_name)), types.NewU32(gib_count)) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_expanding_territory, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_expanding_territory, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_StorageHandler_expanding_territory, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_StorageHandler_expanding_territory, types.NewBytes([]byte(territory_name)), types.NewU32(gib_count)) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_expanding_territory, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_expanding_territory, err) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_StorageHandler_expanding_territory) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_expanding_territory, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_expanding_territory, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_expanding_territory, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_expanding_territory, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_StorageHandler_expanding_territory, StorageHandlerExpansionTerritory, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // RenewalTerritory renewal of territory validity period @@ -631,104 +463,21 @@ func (c *ChainClient) RenewalTerritory(territory_name string, days_count uint32) } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - if days_count == 0 { return "", errors.New("[RenewalTerritory] invalid days_count") } - call, err := types.NewCall(c.metadata, ExtName_StorageHandler_renewal_territory, types.NewBytes([]byte(territory_name)), types.NewU32(days_count)) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_renewal_territory, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_renewal_territory, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_StorageHandler_renewal_territory, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_StorageHandler_renewal_territory, types.NewBytes([]byte(territory_name)), types.NewU32(days_count)) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_renewal_territory, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_renewal_territory, err) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_StorageHandler_renewal_territory) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_renewal_territory, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_renewal_territory, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_renewal_territory, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_renewal_territory, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_StorageHandler_renewal_territory, StorageHandlerRenewalTerritory, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // ReactivateTerritory reactivate expired territories @@ -747,104 +496,21 @@ func (c *ChainClient) ReactivateTerritory(territory_name string, days_count uint } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - if days_count == 0 { return "", errors.New("[ReactivateTerritory] invalid days_count") } - call, err := types.NewCall(c.metadata, ExtName_StorageHandler_reactivate_territory, types.NewBytes([]byte(territory_name)), types.NewU32(days_count)) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_reactivate_territory, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_reactivate_territory, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_StorageHandler_reactivate_territory, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_StorageHandler_reactivate_territory, types.NewBytes([]byte(territory_name)), types.NewU32(days_count)) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_reactivate_territory, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_reactivate_territory, err) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_StorageHandler_reactivate_territory) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_reactivate_territory, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_reactivate_territory, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_reactivate_territory, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_reactivate_territory, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_StorageHandler_reactivate_territory, StorageHandlerReactivateTerritory, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // TerritoryConsignment consignment territory @@ -866,100 +532,17 @@ func (c *ChainClient) TerritoryConsignment(territory_name string) (string, error } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - call, err := types.NewCall(c.metadata, ExtName_StorageHandler_territory_consignment, types.NewBytes([]byte(territory_name))) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_territory_consignment, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_territory_consignment, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_StorageHandler_territory_consignment, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_StorageHandler_territory_consignment, types.NewBytes([]byte(territory_name))) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_territory_consignment, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_territory_consignment, err) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_StorageHandler_territory_consignment) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_territory_consignment, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_territory_consignment, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_territory_consignment, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_territory_consignment, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_StorageHandler_territory_consignment, StorageHandlerConsignment, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // CancelConsignment cancel consignment territory @@ -977,100 +560,17 @@ func (c *ChainClient) CancelConsignment(territory_name string) (string, error) { } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - call, err := types.NewCall(c.metadata, ExtName_StorageHandler_cancel_consignment, types.NewBytes([]byte(territory_name))) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_consignment, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_consignment, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_consignment, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_StorageHandler_cancel_consignment, types.NewBytes([]byte(territory_name))) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_consignment, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_consignment, err) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_StorageHandler_cancel_consignment) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_consignment, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_consignment, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_consignment, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_consignment, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_StorageHandler_cancel_consignment, StorageHandlerCancleConsignment, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // BuyConsignment purchase territories for consignment @@ -1089,104 +589,21 @@ func (c *ChainClient) BuyConsignment(token types.H256, territory_name string) (s } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - if len(territory_name) <= 0 { - return blockhash, errors.New("territory name is empty") - } - - call, err := types.NewCall(c.metadata, ExtName_StorageHandler_buy_consignment, token, types.NewBytes([]byte(territory_name))) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_buy_consignment, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_buy_consignment, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_StorageHandler_buy_consignment, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } + return "", errors.New("territory name is empty") } - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_StorageHandler_buy_consignment, token, types.NewBytes([]byte(territory_name))) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_buy_consignment, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_buy_consignment, err) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_StorageHandler_buy_consignment) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_buy_consignment, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_buy_consignment, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_buy_consignment, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_buy_consignment, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_StorageHandler_buy_consignment, StorageHandlerBuyConsignment, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } // CancelPurchaseAction cancel purchase territories for consignment @@ -1204,98 +621,15 @@ func (c *ChainClient) CancelPurchaseAction(token types.H256) (string, error) { } }() - var ( - blockhash string - accountInfo types.AccountInfo - ) - - call, err := types.NewCall(c.metadata, ExtName_StorageHandler_cancel_purchase_action, token) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_purchase_action, err) - return blockhash, err - } - - ext := types.NewExtrinsic(call) - - key, err := types.CreateStorageKey(c.metadata, System, Account, c.keyring.PublicKey) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] CreateStorageKey: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_purchase_action, err) - return blockhash, err - } - - if !c.GetRpcState() { - err = c.ReconnectRpc() - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] %s", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_purchase_action, ERR_RPC_CONNECTION.Error()) - return blockhash, err - } - } - - ok, err := c.api.RPC.State.GetStorageLatest(key, &accountInfo) + newcall, err := types.NewCall(c.metadata, ExtName_StorageHandler_cancel_purchase_action, token) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] GetStorageLatest: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_purchase_action, err) - c.SetRpcState(false) - return blockhash, err - } - if !ok { - return blockhash, ERR_RPC_EMPTY_VALUE - } - - o := types.SignatureOptions{ - BlockHash: c.genesisHash, - Era: types.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: c.genesisHash, - Nonce: types.NewUCompactFromUInt(uint64(accountInfo.Nonce)), - SpecVersion: c.runtimeVersion.SpecVersion, - Tip: types.NewUCompactFromUInt(0), - TransactionVersion: c.runtimeVersion.TransactionVersion, + return "", fmt.Errorf("rpc err: [%s] [tx] [%s] NewCall: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_purchase_action, err) } - // Sign the transaction - err = ext.Sign(c.keyring, o) + blockhash, err := c.SubmitExtrinsic(newcall, ExtName_StorageHandler_cancel_purchase_action) if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] Sign: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_purchase_action, err) - return blockhash, err + return blockhash, fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_purchase_action, err) } - // Do the transfer and track the actual status - sub, err := c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - if strings.Contains(err.Error(), ERR_PriorityIsTooLow) { - o.Nonce = types.NewUCompactFromUInt(uint64(accountInfo.Nonce + 1)) - err = ext.Sign(c.keyring, o) - if err != nil { - return blockhash, errors.Wrap(err, "[Sign]") - } - sub, err = c.api.RPC.Author.SubmitAndWatchExtrinsic(ext) - if err != nil { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_purchase_action, err) - c.SetRpcState(false) - return blockhash, err - } - } else { - err = fmt.Errorf("rpc err: [%s] [tx] [%s] SubmitAndWatchExtrinsic: %v", c.GetCurrentRpcAddr(), ExtName_StorageHandler_cancel_purchase_action, err) - c.SetRpcState(false) - return blockhash, err - } - } - defer sub.Unsubscribe() - - timeout := time.NewTimer(c.packingTime) - defer timeout.Stop() - - for { - select { - case status := <-sub.Chan(): - if status.IsInBlock { - blockhash = status.AsInBlock.Hex() - err = c.RetrieveEvent(status.AsInBlock, ExtName_StorageHandler_cancel_purchase_action, StorageHandlerCancelPurchaseAction, c.signatureAcc) - return blockhash, err - } - case err = <-sub.Err(): - return blockhash, errors.Wrap(err, "[sub]") - case <-timeout.C: - return blockhash, ERR_RPC_TIMEOUT - } - } + return blockhash, nil } diff --git a/chain/system.go b/chain/system.go index b9e064a..7a84951 100755 --- a/chain/system.go +++ b/chain/system.go @@ -11,9 +11,9 @@ import ( "fmt" "log" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types/codec" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" "github.com/pkg/errors" ) diff --git a/chain/tee.go b/chain/tee.go index efb5fff..e63b7f7 100755 --- a/chain/tee.go +++ b/chain/tee.go @@ -11,9 +11,9 @@ import ( "fmt" "log" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types/codec" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" "github.com/pkg/errors" ) diff --git a/chain/treasury.go b/chain/treasury.go index beee42a..b5cbf82 100644 --- a/chain/treasury.go +++ b/chain/treasury.go @@ -11,9 +11,9 @@ import ( "fmt" "log" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types/codec" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" ) // QueryCurrencyReward query the currency rewards diff --git a/chain/util.go b/chain/util.go index 7bcc050..b083c01 100644 --- a/chain/util.go +++ b/chain/util.go @@ -12,8 +12,8 @@ import ( "regexp" "strings" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" "github.com/ethereum/go-ethereum/log" "github.com/pkg/errors" "github.com/vedhavyas/go-subkey/v2" diff --git a/core/process/file_chunk.go b/core/process/file_chunk.go index 7424fc1..8df21ef 100644 --- a/core/process/file_chunk.go +++ b/core/process/file_chunk.go @@ -20,10 +20,10 @@ import ( "path/filepath" "strings" + "github.com/AstaFrode/go-substrate-rpc-client/v4/signature" "github.com/CESSProject/cess-go-sdk/chain" "github.com/CESSProject/cess-go-sdk/utils" "github.com/btcsuite/btcutil/base58" - "github.com/centrifuge/go-substrate-rpc-client/v4/signature" "github.com/pkg/errors" ) diff --git a/core/process/gateway.go b/core/process/gateway.go index fa7bf09..a792999 100644 --- a/core/process/gateway.go +++ b/core/process/gateway.go @@ -17,10 +17,9 @@ import ( "path/filepath" "strings" - "github.com/CESSProject/cess-go-sdk/chain" + "github.com/AstaFrode/go-substrate-rpc-client/v4/signature" "github.com/CESSProject/cess-go-sdk/utils" "github.com/btcsuite/btcutil/base58" - "github.com/centrifuge/go-substrate-rpc-client/v4/signature" "github.com/pkg/errors" ) @@ -33,7 +32,6 @@ var globalTransport = &http.Transport{ // Receive parameter: // - url: gateway url // - file: stored file -// - bucket: bucket for storing file, it will be created automatically // - territory: territory name // - mnemonic: polkadot account mnemonic // @@ -45,11 +43,10 @@ var globalTransport = &http.Transport{ // 1. Account requires purchasing space, refer to [BuySpace] interface. // 2. Authorize the space usage rights of the account to the gateway account, // refer to the [AuthorizeSpace] interface. -// 3. Make sure the name of the bucket is legal, use the [CheckBucketName] method to check. // // Explanation: // - Account refers to the account where you configured mnemonic when creating an SDK. -func StoreFile(url, file, bucket, territory, mnemonic string) (string, error) { +func StoreFile(url, file, territory, mnemonic string) (string, error) { fstat, err := os.Stat(file) if err != nil { @@ -64,10 +61,6 @@ func StoreFile(url, file, bucket, territory, mnemonic string) (string, error) { return "", errors.New("empty file") } - if !chain.CheckBucketName(bucket) { - return "", errors.New("invalid bucket name") - } - keyringPair, err := signature.KeyringPairFromSecret(mnemonic, 0) if err != nil { return "", fmt.Errorf("[KeyringPairFromSecret] %v", err) @@ -113,7 +106,6 @@ func StoreFile(url, file, bucket, territory, mnemonic string) (string, error) { return "", err } - req.Header.Set("Bucket", bucket) req.Header.Set("Territory", territory) req.Header.Set("Account", acc) req.Header.Set("Message", message) @@ -147,7 +139,6 @@ func StoreFile(url, file, bucket, territory, mnemonic string) (string, error) { // // Receive parameter: // - url: gateway url -// - bucket: the bucket for storing object, it will be created automatically // - territory: territory name // - mnemonic: polkadot account mnemonic // - reader: strings, byte data, file streams, network streams, etc @@ -160,15 +151,10 @@ func StoreFile(url, file, bucket, territory, mnemonic string) (string, error) { // 1. Account requires purchasing space, refer to [BuySpace] interface. // 2. Authorize the space usage rights of the account to the gateway account, // refer to the [AuthorizeSpace] interface. -// 3. Make sure the name of the bucket is legal, use the [CheckBucketName] method to check. // // Explanation: // - Account refers to the account where you configured mnemonic when creating an SDK. -func StoreObject(url string, bucket, territory, mnemonic string, reader io.Reader) (string, error) { - if !chain.CheckBucketName(bucket) { - return "", errors.New("invalid bucket name") - } - +func StoreObject(url string, territory, mnemonic string, reader io.Reader) (string, error) { keyringPair, err := signature.KeyringPairFromSecret(mnemonic, 0) if err != nil { return "", fmt.Errorf("[KeyringPairFromSecret] %v", err) @@ -191,7 +177,6 @@ func StoreObject(url string, bucket, territory, mnemonic string, reader io.Reade return "", err } - req.Header.Set("Bucket", bucket) req.Header.Set("Territory", territory) req.Header.Set("Account", acc) req.Header.Set("Message", message) diff --git a/core/process/storage.go b/core/process/storage.go index cbb7931..c5f222d 100644 --- a/core/process/storage.go +++ b/core/process/storage.go @@ -22,11 +22,11 @@ import ( "strings" "time" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" "github.com/CESSProject/cess-go-sdk/chain" "github.com/CESSProject/cess-go-sdk/core/crypte" "github.com/CESSProject/cess-go-sdk/core/erasure" "github.com/CESSProject/cess-go-sdk/utils" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" ) // StoreFileToMiners store a file to some miners @@ -35,7 +35,6 @@ import ( // - file: stored file // - mnemonic: account mnemonic // - territory: territory name -// - bucket: bucket name // - timeout: timeout for waiting for block transaction to complete // - rpcs: rpc address list // - wantMiner: the wallet account of the miner you want to store. if it is empty, will be randomly selected. @@ -48,16 +47,12 @@ import ( // 1. your account needs to have money, and will be automatically created if the territory you specify does not exist. // 2. if the number of miners you specify is less than 12, file storage will be exited if even one fails. // 3. if the number of miners you specify is greater than 11, no other miners will be found for storage. -func StoreFileToMiners(file string, mnemonic string, territory string, bucket string, timeout time.Duration, rpcs []string, wantMiner []string) (string, error) { +func StoreFileToMiners(file string, mnemonic string, territory string, timeout time.Duration, rpcs []string, wantMiner []string) (string, error) { size, err := CheckFile(file) if err != nil { return "", err } - if !chain.CheckBucketName(bucket) { - return "", errors.New("invalid bucket name") - } - cacheDir := filepath.Join(filepath.Dir(file), fmt.Sprintf("%v", time.Now().UnixMilli())) err = os.MkdirAll(cacheDir, 0755) if err != nil { @@ -104,7 +99,7 @@ func StoreFileToMiners(file string, mnemonic string, territory string, bucket st if !errors.Is(err, chain.ERR_RPC_EMPTY_VALUE) { return fid, err } - _, err = cli.PlaceStorageOrder(fid, filepath.Base(file), bucket, territory, segmentInfo, cli.GetSignatureAccPulickey(), uint64(size)) + _, err = cli.PlaceStorageOrder(fid, filepath.Base(file), territory, segmentInfo, cli.GetSignatureAccPulickey(), uint64(size)) if err != nil { return fid, err } @@ -149,7 +144,7 @@ func StoreFileToMiners(file string, mnemonic string, territory string, bucket st } } if !flag { - _, err = cli.PlaceStorageOrder(fid, filepath.Base(file), bucket, territory, segmentInfo, cli.GetSignatureAccPulickey(), uint64(size)) + _, err = cli.PlaceStorageOrder(fid, filepath.Base(file), territory, segmentInfo, cli.GetSignatureAccPulickey(), uint64(size)) if err != nil { return fid, err } @@ -368,12 +363,7 @@ func DownloadFragmentFromMiner(cli chain.Chainer, minerpuk []byte, fid, fragment return nil, err } - tmp := strings.Split(string(minerInfo.PeerId[:]), "\x00") - if len(tmp) < 1 { - return nil, errors.New("invalid addr") - } - - url := tmp[0] + url := string(minerInfo.Endpoint[:]) if strings.HasSuffix(url, "/") { url = url + "fragment" } else { @@ -532,7 +522,7 @@ func StoreBatchFragmentsToMiner(cli chain.Chainer, fragments []string, fid, acco length := len(fragments) for i := 0; i < length; i++ { - err = UploadFragmentToMiner(cli, string(minerInfo.PeerId[:]), fid, fragments[i]) + err = UploadFragmentToMiner(cli, string(minerInfo.Endpoint[:]), fid, fragments[i]) if err != nil { fmt.Println("UploadFragmentToMiner: ", err) return err diff --git a/example/chain/evm/evm.go b/example/chain/evm/evm.go index 63ff10e..409392e 100644 --- a/example/chain/evm/evm.go +++ b/example/chain/evm/evm.go @@ -8,9 +8,9 @@ import ( "math/big" "time" + "github.com/AstaFrode/go-substrate-rpc-client/v4/types" cess "github.com/CESSProject/cess-go-sdk" "github.com/CESSProject/cess-go-sdk/chain" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" ) // Substrate well-known mnemonic: diff --git a/example/chain/new/sdk.go b/example/chain/new/sdk.go index 6d65648..10f4428 100755 --- a/example/chain/new/sdk.go +++ b/example/chain/new/sdk.go @@ -13,24 +13,25 @@ import ( "time" cess "github.com/CESSProject/cess-go-sdk" + "github.com/CESSProject/cess-go-sdk/utils" ) // Substrate well-known mnemonic: // // - cXgaee2N8E77JJv9gdsGAckv1Qsf3hqWYf7NL4q6ZuQzuAUtB // - https://github.com/substrate-developer-hub/substrate-developer-hub.github.io/issues/613 -var MY_MNEMONIC = "bottom drive obey lake curtain smoke basket hold race lonely fit walk" +var MY_MNEMONIC = "success dirt biology roof episode clarify inflict unit average damage escape tackle" //"bottom drive obey lake curtain smoke basket hold race lonely fit walk" var RPC_ADDRS = []string{ //testnet - "wss://testnet-rpc.cess.network/ws/", + "wss://devnet-rpc.cess.network/ws/", } func main() { sdk, err := cess.New( context.Background(), cess.ConnectRpcAddrs(RPC_ADDRS), - cess.Mnemonic(MY_MNEMONIC), + //cess.Mnemonic(MY_MNEMONIC), cess.TransactionTimeout(time.Second*10), ) if err != nil { @@ -38,7 +39,7 @@ func main() { } defer sdk.Close() - err = sdk.InitExtrinsicsNameForMiner() + err = sdk.InitExtrinsicsName() if err != nil { panic(err) } @@ -46,4 +47,13 @@ func main() { fmt.Println(sdk.SystemVersion()) fmt.Println(sdk.GetCurrentRpcAddr()) fmt.Println(sdk.SystemProperties()) + + puk, err := utils.ParsingPublickey("cXjqBVG3JZhNBAbwpaRDt9ct2TtZcq4R8Zp4DwhCMvhPjskrn") + if err != nil { + panic("cXjqBVG3JZhNBAbwpaRDt9ct2TtZcq4R8Zp4DwhCMvhPjskrn") + } + fmt.Println(sdk.QueryChallengeSnapShot(puk, 42436)) + + return + fmt.Println(sdk.TransferToken("cXkdXokcMa32BAYkmsGjhRGA2CYmLUN2pq69U8k9taXsQPHGp", "100000000000000000000")) } diff --git a/example/chain/parseblock/parseblock.go b/example/chain/parseblock/parseblock.go index c48fe88..4c0e18a 100755 --- a/example/chain/parseblock/parseblock.go +++ b/example/chain/parseblock/parseblock.go @@ -28,7 +28,7 @@ func main() { panic(err) } - blockData, err := sdk.ParseBlockData(123524) + blockData, err := sdk.ParseBlockData(2270026) if err != nil { fmt.Println("ERR: ", err) return @@ -51,16 +51,6 @@ func main() { fmt.Println(" Owner: ", v.Owner) fmt.Println(" Fid: ", v.Fid) } - fmt.Println("createBucketInfo:") - for _, v := range blockData.CreateBucketInfo { - fmt.Println(" Owner: ", v.Owner) - fmt.Println(" BucketName: ", v.BucketName) - } - fmt.Println("DeleteBucketInfo:") - for _, v := range blockData.DeleteBucketInfo { - fmt.Println(" Owner: ", v.Owner) - fmt.Println(" BucketName: ", v.BucketName) - } fmt.Println("GenChallenge:") for _, v := range blockData.GenChallenge { fmt.Println(" GenChallenge miner: ", v) diff --git a/example/file/storefile/tominer.go b/example/file/storefile/tominer.go index 04f603a..5f85a98 100644 --- a/example/file/storefile/tominer.go +++ b/example/file/storefile/tominer.go @@ -35,7 +35,6 @@ func main() { UploadFile, MY_MNEMONIC, TerritoryName, - BucketName, time.Second*15, RPC_ADDRS, WantMiner, diff --git a/go.mod b/go.mod index fc97788..d1d2f78 100644 --- a/go.mod +++ b/go.mod @@ -1,57 +1,51 @@ module github.com/CESSProject/cess-go-sdk -go 1.21 +go 1.22 -toolchain go1.22.4 +toolchain go1.22.10 require ( + github.com/AstaFrode/go-substrate-rpc-client/v4 v4.2.4 github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce github.com/cbergoon/merkletree v0.2.0 - github.com/centrifuge/go-substrate-rpc-client/v4 v4.2.1 - github.com/ethereum/go-ethereum v1.10.20 - github.com/go-ping/ping v1.1.0 - github.com/google/uuid v1.6.0 + github.com/ethereum/go-ethereum v1.14.12 + github.com/go-ping/ping v1.2.0 + github.com/google/uuid v1.3.0 github.com/joho/godotenv v1.5.1 - github.com/klauspost/reedsolomon v1.12.0 + github.com/klauspost/reedsolomon v1.12.4 github.com/mr-tron/base58 v1.2.0 github.com/pixelbender/go-traceroute v0.0.0-20190414152342-e631ab553a80 github.com/pkg/errors v0.9.1 - github.com/samber/lo v1.39.0 - github.com/shirou/gopsutil v3.21.11+incompatible - github.com/stretchr/testify v1.9.0 + github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible + github.com/stretchr/testify v1.10.0 github.com/vedhavyas/go-subkey/v2 v2.0.0 - golang.org/x/crypto v0.25.0 - golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 + golang.org/x/crypto v0.32.0 ) require ( github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect - github.com/btcsuite/btcd v0.22.0-beta // indirect - github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect + github.com/StackExchange/wmi v1.2.1 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/deckarep/golang-set v1.8.0 // indirect github.com/decred/base58 v1.0.4 // indirect - github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect - github.com/go-stack/stack v1.8.1 // indirect + github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect + github.com/holiman/uint256 v1.3.1 // indirect github.com/klauspost/cpuid/v2 v2.2.8 // indirect - github.com/kr/pretty v0.3.1 // indirect github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect github.com/pierrec/xxHash v0.1.5 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rogpeppe/go-internal v1.12.0 // indirect - github.com/rs/cors v1.8.2 // indirect + github.com/rs/cors v1.11.1 // indirect github.com/stretchr/objx v0.5.2 // indirect - github.com/yusufpapurcu/wmi v1.2.3 // indirect - golang.org/x/net v0.27.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.22.0 // indirect - gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect + golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/sys v0.29.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index d7d9159..2846d89 100644 --- a/go.sum +++ b/go.sum @@ -1,59 +1,55 @@ +github.com/AstaFrode/go-substrate-rpc-client/v4 v4.2.4 h1:Inr2ivit8eKF5uWM+ed3P+xpFSddGg/AET2KnA8V3bY= +github.com/AstaFrode/go-substrate-rpc-client/v4 v4.2.4/go.mod h1:qbIMzJc2bc/LP0Nzrw6187sgn7fCXkFYfJwPgfRcBSk= github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= +github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= -github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= -github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= -github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= 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.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= 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/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/snappy-go v1.0.0/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/cbergoon/merkletree v0.2.0 h1:Bttqr3OuoiZEo4ed1L7fTasHka9II+BF9fhBfbNEEoQ= github.com/cbergoon/merkletree v0.2.0/go.mod h1:5c15eckUgiucMGDOCanvalj/yJnD+KAZj1qyJtRW5aM= -github.com/centrifuge/go-substrate-rpc-client/v4 v4.2.1 h1:io49TJ8IOIlzipioJc9pJlrjgdJvqktpUWYxVY5AUjE= -github.com/centrifuge/go-substrate-rpc-client/v4 v4.2.1/go.mod h1:k61SBXqYmnZO4frAJyH3iuqjolYrYsq79r8EstmklDY= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= -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.0/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/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= +github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80NsVHagjM= +github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/base58 v1.0.4 h1:QJC6B0E0rXOPA8U/kw2rP+qiRJsUaE2Er+pYb3siUeA= github.com/decred/base58 v1.0.4/go.mod h1:jJswKPEdvpFpvf7dsDvFZyLT22xZ9lWqEByX38oGd9E= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= -github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= -github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= -github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/ethereum/go-ethereum v1.10.20 h1:75IW830ClSS40yrQC1ZCMZCt5I+zU16oqId2SiQwdQ4= -github.com/ethereum/go-ethereum v1.10.20/go.mod h1:LWUN82TCHGpxB3En5HVmLLzPD7YSrEUFmFfN1nKkVN0= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/ethereum/go-ethereum v1.14.12 h1:8hl57x77HSUo+cXExrURjU/w1VhL+ShCTJrTwcCQSe4= +github.com/ethereum/go-ethereum v1.14.12/go.mod h1:RAC2gVMWJ6FkxSPESfbshrcKpIokgQKsVKmAuqdekDY= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-ping/ping v1.1.0 h1:3MCGhVX4fyEUuhsfwPrsEdQw6xspHkv5zHsiSoDFZYw= -github.com/go-ping/ping v1.1.0/go.mod h1:xIFjORFzTxqIV/tDVGO4eDy/bLuSyawEeojSm3GfRGk= -github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= -github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/go-ping/ping v1.2.0 h1:vsJ8slZBZAXNCK4dPcI2PEE9eM9n9RbXbGouVQ/Y4yQ= +github.com/go-ping/ping v1.2.0/go.mod h1:xIFjORFzTxqIV/tDVGO4eDy/bLuSyawEeojSm3GfRGk= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64= -github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= @@ -61,21 +57,18 @@ github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= +github.com/holiman/uint256 v1.3.1 h1:JfTzmih28bittyHM8z360dCjIA9dbPIBlcTI6lmctQs= +github.com/holiman/uint256 v1.3.1/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= 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/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= 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.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -github.com/klauspost/reedsolomon v1.12.0 h1:I5FEp3xSwVCcEh3F5A7dofEfhXdF/bWhQWPH+XwBFno= -github.com/klauspost/reedsolomon v1.12.0/go.mod h1:EPLZJeh4l27pUGC3aXOjheaoh1I9yut7xTURiW3LQ9Y= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/klauspost/reedsolomon v1.12.4 h1:5aDr3ZGoJbgu/8+j45KtUJxzYm8k08JGtB9Wx1VQ4OA= +github.com/klauspost/reedsolomon v1.12.4/go.mod h1:d3CzOMOt0JXGIFZm1StgkyF14EYr3xneR2rNWo7NcMU= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk= github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU= @@ -83,78 +76,67 @@ github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= 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.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= github.com/pixelbender/go-traceroute v0.0.0-20190414152342-e631ab553a80 h1:I4NMHzc2iGHcxwpt/N3aktqyrDGNx0LrJEYU7g60J0I= github.com/pixelbender/go-traceroute v0.0.0-20190414152342-e631ab553a80/go.mod h1:wtXyvVnMsTkas6cTVJwoTu0voqSm+pYg2YAU/mUfQJQ= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= 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.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA= -github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= -github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= -github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= +github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 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.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -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= -github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= -github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= -github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= -github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/vedhavyas/go-subkey/v2 v2.0.0 h1:LemDIsrVtRSOkp0FA8HxP6ynfKjeOj3BY2U9UNfeDMA= github.com/vedhavyas/go-subkey/v2 v2.0.0/go.mod h1:95aZ+XDCWAUUynjlmi7BtPExjXgXxByE0WfBwbmIRH4= -github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= -github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= 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-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= -golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= -golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 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-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= diff --git a/utils/utils.go b/utils/utils.go index 3eee5ec..6d72622 100755 --- a/utils/utils.go +++ b/utils/utils.go @@ -8,14 +8,7 @@ package utils import ( - // std - "fmt" "reflect" - "strings" - - // 3rd party libs - "github.com/samber/lo" - "golang.org/x/exp/constraints" ) func IsInterfaceNIL(i interface{}) bool { @@ -44,38 +37,3 @@ func CompareSlice(s1, s2 []byte) bool { } return true } - -// NumsToByteStr utility function takes an array of unsigned integers and output the corresponding byte string representing it. -// For example: `[18, 15]` to `120F`. -// -// For `opts` in second parameter it is a map expecting: -// - `space` bool: whether to add a space between each byte, default to `false` -// - `prefix` bool: whether to add `0x` as the prefix, default to `false` -// - `uppercase` bool: whether to display hexadecimal in upper case, default to `true` -// -// If there is an integer larger than 255 in the array, an error is returned. -func NumsToByteStr[T constraints.Unsigned](nums []T, opts map[string]bool) (string, error) { - // default value for opts - var _opts = map[string]bool{} - val, ok := opts["space"] - _opts["space"] = lo.Ternary(ok, val, false) - val, ok = opts["prefix"] - _opts["prefix"] = lo.Ternary(ok, val, false) - val, ok = opts["uppercase"] - _opts["uppercase"] = lo.Ternary(ok, val, true) - - byteStr := []string{} - for _, num := range nums { - if num > 255 { - return "", fmt.Errorf("contains number larger than 255: %v", num) - } - byteStr = append(byteStr, fmt.Sprintf(lo.Ternary((_opts)["uppercase"], "%02X", "%02x"), num)) - } - - prefix := lo.Ternary((_opts)["prefix"], "0x", "") - return prefix + strings.Join(byteStr, lo.Ternary((_opts)["space"], " ", "")), nil -} - -func NumsToByteStrDefault[T constraints.Unsigned](nums []T) (string, error) { - return NumsToByteStr(nums, map[string]bool{}) -} diff --git a/utils/utils_test.go b/utils/utils_test.go deleted file mode 100755 index e233e8d..0000000 --- a/utils/utils_test.go +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright (C) CESS. All rights reserved. -Copyright (C) Cumulus Encrypted Storage System. All rights reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ - -package utils_test - -import ( - // std - "testing" - - // 3rd-party libs - "github.com/stretchr/testify/assert" - - // cess libs - "github.com/CESSProject/cess-go-sdk/utils" -) - -// Test cases for [TestNumsToByteStr] function, testing [utils.NumsToByteStr]. -// It is an array of tuple (input, opts, expected result). -var numsToByteStrTests = []struct { - input []uint32 - opts map[string]bool - expect string -}{ - {[]uint32{15, 17}, map[string]bool{}, "0F11"}, - {[]uint32{15, 17}, map[string]bool{"prefix": true, "uppercase": false}, "0x0f11"}, - {[]uint32{15, 17}, map[string]bool{"space": true}, "0F 11"}, - {[]uint32{250, 15, 137, 153, 21, 63, 234, 235, 33, 164, 154, 189, 40, 122, 44, 96, 137, 183, 184, 180, 31, 212, 6, 2, 142, 22, 148, 22, 126, 164, 163, 105}, map[string]bool{}, "FA0F8999153FEAEB21A49ABD287A2C6089B7B8B41FD406028E1694167EA4A369"}, -} - -// Run through the test cases of [numsToByteStrTests] and check the result. -func TestNumsToByteStr(t *testing.T) { - for _, tc := range numsToByteStrTests { - res, err := utils.NumsToByteStr(tc.input, tc.opts) - assert.Equal(t, tc.expect, res) - assert.NoError(t, err) - } - - // Test for error condition - _, err := utils.NumsToByteStr([]uint32{256}, map[string]bool{}) - assert.Error(t, err) -} diff --git a/version.go b/version.go index 6dcf130..9cb6211 100755 --- a/version.go +++ b/version.go @@ -8,4 +8,4 @@ package sdkgo // SDK Version -const Version = "0.6.3" +const Version = "0.7.0"