Skip to content

Commit

Permalink
Merge pull request #60 from Cerebellum-Network/feature/new_smart_cont…
Browse files Browse the repository at this point in the history
…ract

DDC Smart Contract v.1.0.0
  • Loading branch information
yahortsaryk authored Oct 17, 2023
2 parents 18f9a99 + 6f3ba9d commit 29f019c
Show file tree
Hide file tree
Showing 43 changed files with 6,662 additions and 533 deletions.
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
packages = ./model/... ./core/... ./contract/... ./contentadrstorage/...

.PHONY: test
test:
go test ${packages}

Expand Down
2 changes: 1 addition & 1 deletion contract/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module github.com/cerebellum-network/cere-ddc-sdk-go/contract
require (
github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.8
github.com/decred/base58 v1.0.3
github.com/ethereum/go-ethereum v1.10.17
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7
github.com/patrickmn/go-cache v2.1.0+incompatible
github.com/pkg/errors v0.9.1
Expand All @@ -17,7 +18,6 @@ require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/deckarep/golang-set v1.8.0 // indirect
github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect
github.com/ethereum/go-ethereum v1.10.17 // indirect
github.com/go-stack/stack v1.8.1 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/gtank/merlin v0.1.1 // indirect
Expand Down
5 changes: 3 additions & 2 deletions contract/pkg/actcapture/activity_capture_contract.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ package actcapture
import (
"context"
"encoding/hex"
"math/big"

"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/types/codec"
"github.com/cerebellum-network/cere-ddc-sdk-go/contract/pkg"
log "github.com/sirupsen/logrus"
"math/big"
)

const (
Expand Down Expand Up @@ -106,7 +107,7 @@ func (a *activityCaptureContract) SetCommit(ctx context.Context, hash []byte, ga
ContractAddressSS58: a.contractAddressSS58,
From: a.keyringPair,
Value: 0,
GasLimit: -1,
GasLimit: 0,
Method: a.setCommitMethodId,
Args: []interface{}{a.account, types.NewHash(hash), Gas, From, To},
}
Expand Down
7 changes: 3 additions & 4 deletions contract/pkg/bucket/cdn_node_param.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@ import (

// Structure-helper for json on the CDN Node Params string
type CDNNodeParams struct {
Url string `json:"url"`
Size FlexInt `json:"size"`
Location string `json:"location"`
PublicKey string `json:"publicKey"`
Url string `json:"url"`
Size FlexInt `json:"size"`
Location string `json:"location"`
}

func ReadCDNNodeParams(s string) (p CDNNodeParams, err error) {
Expand Down
18 changes: 8 additions & 10 deletions contract/pkg/bucket/cdn_node_param_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,21 @@ func TestReadCDNNodeParams(t *testing.T) {
}{
{
name: "Positive test",
args: args{s: `{"url":"http://localhost:8080", "publicKey": "NodePublicKey", "size":1, "location":"US"}`},
args: args{s: `{"url":"http://localhost:8080", "size":1, "location":"US"}`},
wantP: CDNNodeParams{
Url: "http://localhost:8080",
Size: 1,
Location: "US",
PublicKey: "NodePublicKey",
Url: "http://localhost:8080",
Size: 1,
Location: "US",
},
wantErr: false,
},
{
name: "Positive test with size as string",
args: args{s: `{"url":"http://localhost:8080", "publicKey": "NodePublicKey", "size":"1", "location":"US"}`},
args: args{s: `{"url":"http://localhost:8080", "size":"1", "location":"US"}`},
wantP: CDNNodeParams{
Url: "http://localhost:8080",
Size: 1,
Location: "US",
PublicKey: "NodePublicKey",
Url: "http://localhost:8080",
Size: 1,
Location: "US",
},
wantErr: false,
},
Expand Down
902 changes: 832 additions & 70 deletions contract/pkg/bucket/ddc_bucket_contract.go

Large diffs are not rendered by default.

178 changes: 165 additions & 13 deletions contract/pkg/bucket/ddc_bucket_contract_errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,183 @@ package bucket
import "errors"

const (
bucketDoesNotExist = iota
providerDoesNotExist
unauthorizedProvider
nodeDoesNotExist = iota
cdnNodeDoesNotExist
nodeAlreadyExists
cdnNodeAlreadyExists
accountDoesNotExist
paramsDoesNotExist
paramsSizeExceedsLimit
onlyOwner
onlyNodeProvider
onlyCdnNodeProvider
onlyClusterManager
onlyTrustedClusterManager
onlyValidator
onlySuperAdmin
onlyClusterManagerOrNodeProvider
onlyClusterManagerOrCdnNodeProvider
unauthorized
clusterDoesNotExist
clusterIsNotEmpty
topologyIsNotCreated
topologyAlreadyExists
nodesSizeExceedsLimit
cdnNodesSizeExceedsLimit
vNodesSizeExceedsLimit
accountsSizeExceedsLimit
nodeIsNotAddedToCluster
nodeIsAddedToCluster
cdnNodeIsNotAddedToCluster
cdnNodeIsAddedToCluster
vNodeDoesNotExistsInCluster
vNodeIsNotAssignedToNode
vNodeIsAlreadyAssignedToNode
atLeastOneVNodeHasToBeAssigned
nodeProviderIsNotSuperAdmin
cdnNodeOwnerIsNotSuperAdmin
bucketDoesNotExist
bondingPeriodNotFinished
transferFailed
insufficientBalance
insufficientNodeResources
insufficientClusterResources
eraSettingFailed
)

//ToDo update error regarding latest contract
// ToDo update error regarding latest contract
var (
ErrBucketDoesNotExist = errors.New("bucket doesn't exist")
ErrProviderDoesNotExist = errors.New("provider doesn't exist")
ErrUnauthorizedProvider = errors.New("unauthorized provider")
ErrTransferFailed = errors.New("transfer failed")
ErrUndefined = errors.New("undefined error")
ErrBucketDoesNotExist = errors.New("bucket doesn't exist")
ErrTransferFailed = errors.New("transfer failed")
ErrUndefined = errors.New("undefined error")
ErrNodeDoesNotExist = errors.New("node does not exist")
ErrCdnNodeDoesNotExist = errors.New("cdn node does not exist")
ErrNodeAlreadyExists = errors.New("node already exists")
ErrCdnNodeAlreadyExists = errors.New("cdn node already exists")
ErrAccountDoesNotExist = errors.New("account does not exist")
ErrParamsDoesNotExist = errors.New("params does not exist")
ErrParamsSizeExceedsLimit = errors.New("params size exceeds limit")
ErrOnlyOwner = errors.New("only owner")
ErrOnlyNodeProvider = errors.New("only node provider")
ErrOnlyCdnNodeProvider = errors.New("only cdn node provider")
ErrOnlyClusterManager = errors.New("only cluster manager")
ErrOnlyTrustedClusterManager = errors.New("only trusted cluster manager")
ErrOnlyValidator = errors.New("only validator")
ErrOnlySuperAdmin = errors.New("only super admin")
ErrOnlyClusterManagerOrNodeProvider = errors.New("only cluster manager or node provider")
ErrOnlyClusterManagerOrCdnNodeProvider = errors.New("only cluster manager or cdn node provider")
ErrUnauthorized = errors.New("unauthorized")
ErrClusterDoesNotExist = errors.New("cluster does not exist")
ErrClusterIsNotEmpty = errors.New("cluster is not empty")
ErrTopologyIsNotCreated = errors.New("topology is not created")
ErrTopologyAlreadyExists = errors.New("topology already exists")
ErrNodesSizeExceedsLimit = errors.New("nodes size exceeds limit")
ErrCdnNodesSizeExceedsLimit = errors.New("cdn nodes size exceeds limit")
ErrVNodesSizeExceedsLimit = errors.New("vnodes size exceeds limit")
ErrAccountsSizeExceedsLimit = errors.New("accounts size exceeds limit")
ErrNodeIsNotAddedToCluster = errors.New("node is not added to cluster")
ErrNodeIsAddedToCluster = errors.New("node is added to cluster")
ErrCdnNodeIsNotAddedToCluster = errors.New("cdn node is not added to cluster")
ErrCdnNodeIsAddedToCluster = errors.New("cdn node is added to cluster")
ErrVNodeDoesNotExistsInCluster = errors.New("vnode does not exists in cluster")
ErrVNodeIsNotAssignedToNode = errors.New("vnode is not assigned to node")
ErrVNodeIsAlreadyAssignedToNode = errors.New("vnode is already assigned to node")
ErrAtLeastOneVNodeHasToBeAssigned = errors.New("at least one vnode has to be assigned")
ErrNodeProviderIsNotSuperAdmin = errors.New("node provider is not super admin")
ErrCdnNodeOwnerIsNotSuperAdmin = errors.New("cdn node owner is not super admin")
ErrBondingPeriodNotFinished = errors.New("bonding period is not finished")
ErrInsufficientBalance = errors.New("insufficient balance")
ErrInsufficientNodeResources = errors.New("insufficient node resources")
ErrInsufficientClusterResources = errors.New("insufficient cluster resources")
ErrEraSettingFailed = errors.New("era setting failed")
)

func parseDdcBucketContractError(error uint8) error {
switch error {
case bucketDoesNotExist:
return ErrBucketDoesNotExist
case providerDoesNotExist:
return ErrProviderDoesNotExist
case unauthorizedProvider:
return ErrUnauthorizedProvider
case transferFailed:
return ErrTransferFailed
case nodeDoesNotExist:
return ErrNodeDoesNotExist
case cdnNodeDoesNotExist:
return ErrCdnNodeDoesNotExist
case nodeAlreadyExists:
return ErrNodeAlreadyExists
case cdnNodeAlreadyExists:
return ErrCdnNodeAlreadyExists
case accountDoesNotExist:
return ErrAccountDoesNotExist
case paramsDoesNotExist:
return ErrParamsDoesNotExist
case paramsSizeExceedsLimit:
return ErrParamsSizeExceedsLimit
case onlyOwner:
return ErrOnlyOwner
case onlyNodeProvider:
return ErrOnlyNodeProvider
case onlyCdnNodeProvider:
return ErrOnlyCdnNodeProvider
case onlyClusterManager:
return ErrOnlyClusterManager
case onlyTrustedClusterManager:
return ErrOnlyTrustedClusterManager
case onlyValidator:
return ErrOnlyValidator
case onlySuperAdmin:
return ErrOnlySuperAdmin
case onlyClusterManagerOrNodeProvider:
return ErrOnlyClusterManagerOrNodeProvider
case onlyClusterManagerOrCdnNodeProvider:
return ErrOnlyClusterManagerOrCdnNodeProvider
case unauthorized:
return ErrUnauthorized
case clusterDoesNotExist:
return ErrClusterDoesNotExist
case clusterIsNotEmpty:
return ErrClusterIsNotEmpty
case topologyIsNotCreated:
return ErrTopologyIsNotCreated
case topologyAlreadyExists:
return ErrTopologyAlreadyExists
case nodesSizeExceedsLimit:
return ErrNodesSizeExceedsLimit
case cdnNodesSizeExceedsLimit:
return ErrCdnNodesSizeExceedsLimit
case vNodesSizeExceedsLimit:
return ErrVNodesSizeExceedsLimit
case accountsSizeExceedsLimit:
return ErrAccountsSizeExceedsLimit
case nodeIsNotAddedToCluster:
return ErrNodeIsNotAddedToCluster
case nodeIsAddedToCluster:
return ErrNodeIsAddedToCluster
case cdnNodeIsNotAddedToCluster:
return ErrCdnNodeIsNotAddedToCluster
case cdnNodeIsAddedToCluster:
return ErrCdnNodeIsAddedToCluster
case vNodeDoesNotExistsInCluster:
return ErrVNodeDoesNotExistsInCluster
case vNodeIsNotAssignedToNode:
return ErrVNodeIsNotAssignedToNode
case vNodeIsAlreadyAssignedToNode:
return ErrVNodeIsAlreadyAssignedToNode
case atLeastOneVNodeHasToBeAssigned:
return ErrAtLeastOneVNodeHasToBeAssigned
case nodeProviderIsNotSuperAdmin:
return ErrNodeProviderIsNotSuperAdmin
case cdnNodeOwnerIsNotSuperAdmin:
return ErrCdnNodeOwnerIsNotSuperAdmin
case bondingPeriodNotFinished:
return ErrBondingPeriodNotFinished
case insufficientBalance:
return ErrInsufficientBalance
case insufficientNodeResources:
return ErrInsufficientNodeResources
case insufficientClusterResources:
return ErrInsufficientClusterResources
case eraSettingFailed:
return ErrEraSettingFailed
default:
return ErrUndefined
}
Expand Down
Loading

0 comments on commit 29f019c

Please sign in to comment.