From ceb6300e529fad19d815640892b74abcdb6281b2 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 14 Jun 2024 10:53:01 +0300 Subject: [PATCH 1/2] adm: add support for the new neofs-contract archives As a part of https://github.com/nspcc-dev/neofs-contract/issues/384 I'd like to unify different code dealing with them. Signed-off-by: Roman Khimov --- CHANGELOG.md | 1 + .../modules/morph/initialize_deploy.go | 22 +++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ae4e09ed8..8248a499f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Changelog for NeoFS Node ### Added - Indexes inspection command to neofs-lens (#2882) - Add objects sanity checker to neofs-lens (#2506) +- Support for 0.20.0+ neofs-contract archive format (#2872) ### Fixed - Control service's Drop call does not clean metabase (#2822) diff --git a/cmd/neofs-adm/internal/modules/morph/initialize_deploy.go b/cmd/neofs-adm/internal/modules/morph/initialize_deploy.go index 19a2dec15a..b11b8a5e5d 100644 --- a/cmd/neofs-adm/internal/modules/morph/initialize_deploy.go +++ b/cmd/neofs-adm/internal/modules/morph/initialize_deploy.go @@ -4,6 +4,7 @@ import ( "archive/tar" "compress/gzip" "encoding/json" + "errors" "fmt" "io" "os" @@ -372,11 +373,23 @@ func (c *initializeContext) readContracts(names []string) error { func readContract(ctrPath, ctrName string) (*contractState, error) { rawNef, err := os.ReadFile(filepath.Join(ctrPath, ctrName+"_contract.nef")) if err != nil { - return nil, fmt.Errorf("can't read NEF file for %s contract: %w", ctrName, err) + if !errors.Is(err, os.ErrNotExist) { + return nil, fmt.Errorf("can't read NEF file for %s contract: %w", ctrName, err) + } + rawNef, err = os.ReadFile(filepath.Join(ctrPath, "contract.nef")) + if err != nil { + return nil, fmt.Errorf("can't read NEF file for %s contract: %w", ctrName, err) + } } rawManif, err := os.ReadFile(filepath.Join(ctrPath, "config.json")) if err != nil { - return nil, fmt.Errorf("can't read manifest file for %s contract: %w", ctrName, err) + if !errors.Is(err, os.ErrNotExist) { + return nil, fmt.Errorf("can't read manifest file for %s contract: %w", ctrName, err) + } + rawManif, err = os.ReadFile(filepath.Join(ctrPath, "manifest.json")) + if err != nil { + return nil, fmt.Errorf("can't read manifest file for %s contract: %w", ctrName, err) + } } cs := &contractState{ @@ -429,12 +442,13 @@ func readContractsFromArchive(file io.Reader, names []string) (map[string]*contr } switch { - case strings.HasSuffix(h.Name, filepath.Join(ctrName, ctrName+"_contract.nef")): + case strings.HasSuffix(h.Name, "contract.nef"): cs.RawNEF, err = io.ReadAll(r) if err != nil { return nil, fmt.Errorf("can't read NEF file for %s contract: %w", ctrName, err) } - case strings.HasSuffix(h.Name, "config.json"): + case strings.HasSuffix(h.Name, "config.json") || + strings.HasSuffix(h.Name, "manifest.json"): cs.RawManifest, err = io.ReadAll(r) if err != nil { return nil, fmt.Errorf("can't read manifest file for %s contract: %w", ctrName, err) From ed0048e9a1133f8b6c81cb5702d7454b6b55a6ef Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 14 Jun 2024 12:44:25 +0300 Subject: [PATCH 2/2] innerring: use contracts from neofs-contract repository Now updating neofs-contract dependency will automatically update contracts, see https://github.com/nspcc-dev/neofs-contract/issues/384 This also updates contracts dependency to 0.20.0 adjusting the code where neccessary. Signed-off-by: Roman Khimov --- CHANGELOG.md | 2 + .../internal/modules/morph/remove_node.go | 4 +- cmd/neofs-node/container.go | 4 +- contracts/00-nns.manifest.json | 1 - contracts/00-nns.nef | Bin 7084 -> 0 bytes contracts/01-proxy.manifest.json | 1 - contracts/01-proxy.nef | Bin 794 -> 0 bytes contracts/02-audit.manifest.json | 1 - contracts/02-audit.nef | Bin 1409 -> 0 bytes contracts/03-netmap.manifest.json | 1 - contracts/03-netmap.nef | Bin 4631 -> 0 bytes contracts/04-balance.manifest.json | 1 - contracts/04-balance.nef | Bin 2951 -> 0 bytes contracts/05-reputation.manifest.json | 1 - contracts/05-reputation.nef | Bin 1344 -> 0 bytes contracts/06-neofsid.manifest.json | 1 - contracts/06-neofsid.nef | Bin 1618 -> 0 bytes contracts/07-container.manifest.json | 1 - contracts/07-container.nef | Bin 6459 -> 0 bytes contracts/08-alphabet.manifest.json | 1 - contracts/08-alphabet.nef | Bin 3998 -> 0 bytes contracts/contracts.go | 162 ------------------ contracts/contracts_test.go | 130 -------------- go.mod | 11 +- go.sum | 24 +-- pkg/innerring/contracts.go | 4 +- pkg/morph/client/container/get.go | 4 +- pkg/morph/client/netmap/netmap.go | 39 ++--- pkg/morph/client/netmap/netmap_test.go | 12 +- pkg/morph/client/netmap/update_state.go | 9 +- pkg/morph/event/netmap/update_peer.go | 16 +- 31 files changed, 59 insertions(+), 371 deletions(-) delete mode 100755 contracts/00-nns.manifest.json delete mode 100755 contracts/00-nns.nef delete mode 100755 contracts/01-proxy.manifest.json delete mode 100755 contracts/01-proxy.nef delete mode 100755 contracts/02-audit.manifest.json delete mode 100755 contracts/02-audit.nef delete mode 100755 contracts/03-netmap.manifest.json delete mode 100755 contracts/03-netmap.nef delete mode 100755 contracts/04-balance.manifest.json delete mode 100755 contracts/04-balance.nef delete mode 100755 contracts/05-reputation.manifest.json delete mode 100755 contracts/05-reputation.nef delete mode 100755 contracts/06-neofsid.manifest.json delete mode 100755 contracts/06-neofsid.nef delete mode 100755 contracts/07-container.manifest.json delete mode 100755 contracts/07-container.nef delete mode 100755 contracts/08-alphabet.manifest.json delete mode 100755 contracts/08-alphabet.nef delete mode 100644 contracts/contracts.go delete mode 100644 contracts/contracts_test.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 8248a499f5..1e04fed041 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,8 @@ Changelog for NeoFS Node ### Removed ### Updated +- neofs-contract dependency to 0.20.0 (#2872) +- NeoGo dependency to 0.106.3 (#2872) ### Updating from v0.42.1 diff --git a/cmd/neofs-adm/internal/modules/morph/remove_node.go b/cmd/neofs-adm/internal/modules/morph/remove_node.go index a81582b244..9ffa756667 100644 --- a/cmd/neofs-adm/internal/modules/morph/remove_node.go +++ b/cmd/neofs-adm/internal/modules/morph/remove_node.go @@ -8,7 +8,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/vm/emit" - netmapcontract "github.com/nspcc-dev/neofs-contract/contracts/netmap" + "github.com/nspcc-dev/neofs-contract/rpc/netmap" "github.com/nspcc-dev/neofs-contract/rpc/nns" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -47,7 +47,7 @@ func removeNodesCmd(cmd *cobra.Command, args []string) error { bw := io.NewBufBinWriter() for i := range nodeKeys { emit.AppCall(bw.BinWriter, nmHash, "updateStateIR", callflag.All, - int64(netmapcontract.NodeStateOffline), nodeKeys[i].Bytes()) + netmap.NodeStateOffline, nodeKeys[i].Bytes()) } if err := emitNewEpochCall(bw, wCtx, nmHash); err != nil { diff --git a/cmd/neofs-node/container.go b/cmd/neofs-node/container.go index feeaf35929..bfa1fbb388 100644 --- a/cmd/neofs-node/container.go +++ b/cmd/neofs-node/container.go @@ -11,7 +11,7 @@ import ( containerV2 "github.com/nspcc-dev/neofs-api-go/v2/container" containerGRPC "github.com/nspcc-dev/neofs-api-go/v2/container/grpc" - containercontract "github.com/nspcc-dev/neofs-contract/contracts/container" + containerrpc "github.com/nspcc-dev/neofs-contract/rpc/container" "github.com/nspcc-dev/neofs-node/pkg/core/client" containerCore "github.com/nspcc-dev/neofs-node/pkg/core/container" netmapCore "github.com/nspcc-dev/neofs-node/pkg/core/netmap" @@ -133,7 +133,7 @@ func initContainerService(c *cfg) { key: pubKey, } - loadAccumulator := loadstorage.New(containercontract.CleanupDelta) + loadAccumulator := loadstorage.New(containerrpc.CleanupDelta) addNewEpochAsyncNotificationHandler(c, func(e event.Event) { ev := e.(netmapEv.NewEpoch) diff --git a/contracts/00-nns.manifest.json b/contracts/00-nns.manifest.json deleted file mode 100755 index e83ced466b..0000000000 --- a/contracts/00-nns.manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NameService","abi":{"methods":[{"name":"_initialize","offset":0,"parameters":[],"returntype":"Void","safe":false},{"name":"_deploy","offset":32,"parameters":[{"name":"data","type":"Any"},{"name":"isUpdate","type":"Boolean"}],"returntype":"Void","safe":false},{"name":"addRecord","offset":3236,"parameters":[{"name":"name","type":"String"},{"name":"typ","type":"Integer"},{"name":"data","type":"String"}],"returntype":"Void","safe":false},{"name":"balanceOf","offset":976,"parameters":[{"name":"owner","type":"Hash160"}],"returntype":"Integer","safe":true},{"name":"decimals","offset":791,"parameters":[],"returntype":"Integer","safe":true},{"name":"deleteRecords","offset":3460,"parameters":[{"name":"name","type":"String"},{"name":"typ","type":"Integer"}],"returntype":"Void","safe":false},{"name":"getAllRecords","offset":3704,"parameters":[{"name":"name","type":"String"}],"returntype":"InteropInterface","safe":true},{"name":"getPrice","offset":1427,"parameters":[],"returntype":"Integer","safe":true},{"name":"getRecords","offset":3376,"parameters":[{"name":"name","type":"String"},{"name":"typ","type":"Integer"}],"returntype":"Array","safe":true},{"name":"isAvailable","offset":1461,"parameters":[{"name":"name","type":"String"}],"returntype":"Boolean","safe":true},{"name":"ownerOf","offset":813,"parameters":[{"name":"tokenID","type":"ByteArray"}],"returntype":"Hash160","safe":true},{"name":"properties","offset":883,"parameters":[{"name":"tokenID","type":"ByteArray"}],"returntype":"Map","safe":true},{"name":"register","offset":1722,"parameters":[{"name":"name","type":"String"},{"name":"owner","type":"Hash160"},{"name":"email","type":"String"},{"name":"refresh","type":"Integer"},{"name":"retry","type":"Integer"},{"name":"expire","type":"Integer"},{"name":"ttl","type":"Integer"}],"returntype":"Boolean","safe":false},{"name":"registerTLD","offset":2397,"parameters":[{"name":"name","type":"String"},{"name":"email","type":"String"},{"name":"refresh","type":"Integer"},{"name":"retry","type":"Integer"},{"name":"expire","type":"Integer"},{"name":"ttl","type":"Integer"}],"returntype":"Void","safe":false},{"name":"renew","offset":2610,"parameters":[{"name":"name","type":"String"}],"returntype":"Integer","safe":false},{"name":"resolve","offset":3642,"parameters":[{"name":"name","type":"String"},{"name":"typ","type":"Integer"}],"returntype":"Array","safe":true},{"name":"roots","offset":1321,"parameters":[],"returntype":"InteropInterface","safe":true},{"name":"setAdmin","offset":2821,"parameters":[{"name":"name","type":"String"},{"name":"admin","type":"Hash160"}],"returntype":"Void","safe":false},{"name":"setPrice","offset":1349,"parameters":[{"name":"price","type":"Integer"}],"returntype":"Void","safe":false},{"name":"setRecord","offset":2996,"parameters":[{"name":"name","type":"String"},{"name":"typ","type":"Integer"},{"name":"id","type":"Integer"},{"name":"data","type":"String"}],"returntype":"Void","safe":false},{"name":"symbol","offset":785,"parameters":[],"returntype":"String","safe":true},{"name":"tokens","offset":1052,"parameters":[],"returntype":"InteropInterface","safe":true},{"name":"tokensOf","offset":1081,"parameters":[{"name":"owner","type":"Hash160"}],"returntype":"InteropInterface","safe":true},{"name":"totalSupply","offset":797,"parameters":[],"returntype":"Integer","safe":true},{"name":"transfer","offset":1143,"parameters":[{"name":"to","type":"Hash160"},{"name":"tokenID","type":"ByteArray"},{"name":"data","type":"Any"}],"returntype":"Boolean","safe":false},{"name":"update","offset":698,"parameters":[{"name":"nef","type":"ByteArray"},{"name":"manifest","type":"String"},{"name":"data","type":"Any"}],"returntype":"Void","safe":false},{"name":"updateSOA","offset":2731,"parameters":[{"name":"name","type":"String"},{"name":"email","type":"String"},{"name":"refresh","type":"Integer"},{"name":"retry","type":"Integer"},{"name":"expire","type":"Integer"},{"name":"ttl","type":"Integer"}],"returntype":"Void","safe":false},{"name":"version","offset":793,"parameters":[],"returntype":"Integer","safe":true}],"events":[{"name":"Transfer","parameters":[{"name":"from","type":"Hash160"},{"name":"to","type":"Hash160"},{"name":"amount","type":"Integer"},{"name":"tokenId","type":"ByteArray"}]}]},"features":{},"groups":[],"permissions":[{"contract":"0xfffdc93764dbaddd97c48f252a53ea4643faa3fd","methods":["update"]},{"contract":"*","methods":["onNEP11Payment"]}],"supportedstandards":["NEP-11"],"trusts":[],"extra":null} \ No newline at end of file diff --git a/contracts/00-nns.nef b/contracts/00-nns.nef deleted file mode 100755 index 793e7ad7305f6f7fcc7f5535b29d41708df85377..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7084 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 KA6$F(SN<2@4=M8i diff --git a/contracts/01-proxy.manifest.json b/contracts/01-proxy.manifest.json deleted file mode 100755 index cb27a21ea1..0000000000 --- a/contracts/01-proxy.manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NeoFS Notary Proxy","abi":{"methods":[{"name":"_deploy","offset":0,"parameters":[{"name":"data","type":"Any"},{"name":"isUpdate","type":"Boolean"}],"returntype":"Void","safe":false},{"name":"onNEP17Payment","offset":314,"parameters":[{"name":"from","type":"Hash160"},{"name":"amount","type":"Integer"},{"name":"data","type":"Any"}],"returntype":"Void","safe":false},{"name":"update","offset":472,"parameters":[{"name":"script","type":"ByteArray"},{"name":"manifest","type":"ByteArray"},{"name":"data","type":"Any"}],"returntype":"Void","safe":false},{"name":"verify","offset":601,"parameters":[],"returntype":"Boolean","safe":true},{"name":"version","offset":644,"parameters":[],"returntype":"Integer","safe":true}],"events":[]},"features":{},"groups":[],"permissions":[{"contract":"*","methods":["update"]}],"supportedstandards":[],"trusts":[],"extra":null} \ No newline at end of file diff --git a/contracts/01-proxy.nef b/contracts/01-proxy.nef deleted file mode 100755 index 76be041d1ab25ea71db906ee55a9dd0b69d43626..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 794 zcmeZsbu-RO&DTxO*EP^HG%(RKU?2l9eNBGlut&qzmyh*G-(uFypB5B5yyrx$01;`kaZ3P*QKh)p!fW;Z-Sm~MYs1+2YmSyIb7Ausc78Pga=PBf7 z7Uw3GBxhJDq*fH9CYPk9DA?Ho6-xz}Gct5rRWMq58CddYBOF|;keE}HnwV0lke{Yd zl98&AlUR~kTmm!DN&%}VOBXH$?- zn0Z4@nn&b(*`w|YY&u@t6h7vQUidW_h6=xjsDq5LdH#LBvtbttt zRB}4d93^IsRcabM@@UbJn4FwiP*SYm?ij3)pO;f37%OPBB0E z_dgFCM2~z%h+|T1bdW2L7@A8U^036f1W62>0jA&n{{LT?369TIYC^!|Vfq9i;=thm M3{Ho8YzGbj0Bao;5C8xG diff --git a/contracts/02-audit.manifest.json b/contracts/02-audit.manifest.json deleted file mode 100755 index 6a71f553d2..0000000000 --- a/contracts/02-audit.manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NeoFS Audit","abi":{"methods":[{"name":"_deploy","offset":0,"parameters":[{"name":"data","type":"Any"},{"name":"isUpdate","type":"Boolean"}],"returntype":"Void","safe":false},{"name":"get","offset":832,"parameters":[{"name":"id","type":"ByteArray"}],"returntype":"ByteArray","safe":true},{"name":"list","offset":857,"parameters":[],"returntype":"Array","safe":true},{"name":"listByCID","offset":923,"parameters":[{"name":"epoch","type":"Integer"},{"name":"cid","type":"ByteArray"}],"returntype":"Array","safe":true},{"name":"listByEpoch","offset":891,"parameters":[{"name":"epoch","type":"Integer"}],"returntype":"Array","safe":true},{"name":"listByNode","offset":966,"parameters":[{"name":"epoch","type":"Integer"},{"name":"cid","type":"ByteArray"},{"name":"key","type":"PublicKey"}],"returntype":"Array","safe":true},{"name":"put","offset":685,"parameters":[{"name":"rawAuditResult","type":"ByteArray"}],"returntype":"Void","safe":false},{"name":"update","offset":556,"parameters":[{"name":"script","type":"ByteArray"},{"name":"manifest","type":"ByteArray"},{"name":"data","type":"Any"}],"returntype":"Void","safe":false},{"name":"version","offset":1044,"parameters":[],"returntype":"Integer","safe":true}],"events":[]},"features":{},"groups":[],"permissions":[{"contract":"*","methods":["update"]}],"supportedstandards":[],"trusts":[],"extra":null} \ No newline at end of file diff --git a/contracts/02-audit.nef b/contracts/02-audit.nef deleted file mode 100755 index 2f2c15f90938147a871dbdf6d2d3f9664335bec3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1409 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 P*t^{&@UGD*etFm5!4lXK diff --git a/contracts/06-neofsid.manifest.json b/contracts/06-neofsid.manifest.json deleted file mode 100755 index 02d2d78f3d..0000000000 --- a/contracts/06-neofsid.manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NeoFS ID","abi":{"methods":[{"name":"_initialize","offset":0,"parameters":[],"returntype":"Void","safe":false},{"name":"_deploy","offset":35,"parameters":[{"name":"data","type":"Any"},{"name":"isUpdate","type":"Boolean"}],"returntype":"Void","safe":false},{"name":"addKey","offset":857,"parameters":[{"name":"owner","type":"ByteArray"},{"name":"keys","type":"Array"}],"returntype":"Void","safe":false},{"name":"key","offset":1269,"parameters":[{"name":"owner","type":"ByteArray"}],"returntype":"Array","safe":true},{"name":"removeKey","offset":1062,"parameters":[{"name":"owner","type":"ByteArray"},{"name":"keys","type":"Array"}],"returntype":"Void","safe":false},{"name":"update","offset":726,"parameters":[{"name":"script","type":"ByteArray"},{"name":"manifest","type":"ByteArray"},{"name":"data","type":"Any"}],"returntype":"Void","safe":false},{"name":"version","offset":1340,"parameters":[],"returntype":"Integer","safe":true}],"events":[]},"features":{},"groups":[],"permissions":[{"contract":"*","methods":["update"]}],"supportedstandards":[],"trusts":[],"extra":null} \ No newline at end of file diff --git a/contracts/06-neofsid.nef b/contracts/06-neofsid.nef deleted file mode 100755 index 39f00c276b801149ac30f431947cedc7500ed165..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1618 zcmcIkU2NM_6t>&6wAuyIpH16X*=^Q&VX%<0gwjX_o00(@pomO#5<ZiSKFD_kF|Yrea;oHfk{M1 zNuhu#MTp~gzH)82x_t5S?ypYI8UFWA+_^}qA4M=FN(;wxUtEt2iVyFdIhA|o>r2mc z|IU4i&H=ULILM+;TN?8I31O3lT;yQI#77X%fH-btrtJkD^eLvTE8~d58B8tYx=_`T zIt3>bY$EMtajdmPdhf<$)%JzFCohQuk@I2^V|j6)?QATPjdmTa%1iw$+V2?Y4;ie% z>yIZo^mK*QF!)F0#63EQT8I`DJFhy}rcWuZo|7It{N+^<>|jHkaIpqeVo^s?Da010 zjV?85;m0T6632LMh~sR%Gna}se>!rhR`%24HT&qE>-nJTeb!~yx>!A;dpXJ2f4Q^% zHg(F@r9bxk@|rlt@g85!BvL@I9W;$e$%WI%aWS!A0lNi-s(J<@&qgXm8hmtwC2!9S z@!V|2$sFt~rMWfv-@gA~n&WCBthK~tf~rK^A$$X9=Ky%F-=0<#!NdH zPkw#y&6j=}wDrY-&APmlWP3^uwQ}Je#b_ny=WsAhuEh&xGcQE^OarCeB2;nwoD_lx z_kq5RXa{LbSmDZIaeaPX*yW|uwOVan*bX+^$kMPi38x7~P(w7BYQ_W20(Cifpr;P5 zU<*07N~I1M2Roa^-IA&@u}+js(}%Z|ALCooy*KNX_kb9&Sc1ChFQ_UOEZG{{Pg8Ok z&p(njSbn~zVuRk5V}FhwxRT$y`;9YifA{fuZRneo8fb64*{L6r#$S2y`7GFan{XQ$ ztDcXQKxXK9rDcU#~W|%=O2&f!?)TyEJZM6;2^P zQ;vO`&1M5L7SlifRjV<>jk2}@Pr}VI8MS2r=gqnyxFFN1FzB1r*%B@Qo)44r(xu0? zzFLl*W1wIQD*(qy$C&%}@O*V;6AONwHd7zWFz4Bsir2 diff --git a/contracts/07-container.manifest.json b/contracts/07-container.manifest.json deleted file mode 100755 index 387a77b723..0000000000 --- a/contracts/07-container.manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NeoFS Container","abi":{"methods":[{"name":"_initialize","offset":0,"parameters":[],"returntype":"Void","safe":false},{"name":"_deploy","offset":83,"parameters":[{"name":"data","type":"Any"},{"name":"isUpdate","type":"Boolean"}],"returntype":"Void","safe":false},{"name":"alias","offset":3554,"parameters":[{"name":"cid","type":"ByteArray"}],"returntype":"String","safe":true},{"name":"containersOf","offset":3694,"parameters":[{"name":"owner","type":"ByteArray"}],"returntype":"InteropInterface","safe":true},{"name":"count","offset":3649,"parameters":[],"returntype":"Integer","safe":true},{"name":"delete","offset":3145,"parameters":[{"name":"containerID","type":"ByteArray"},{"name":"signature","type":"Signature"},{"name":"token","type":"ByteArray"}],"returntype":"Void","safe":false},{"name":"eACL","offset":4106,"parameters":[{"name":"containerID","type":"ByteArray"}],"returntype":"Array","safe":true},{"name":"get","offset":3441,"parameters":[{"name":"containerID","type":"ByteArray"}],"returntype":"Array","safe":true},{"name":"getContainerSize","offset":4366,"parameters":[{"name":"id","type":"ByteArray"}],"returntype":"Array","safe":true},{"name":"iterateAllContainerSizes","offset":4739,"parameters":[{"name":"epoch","type":"Integer"}],"returntype":"InteropInterface","safe":true},{"name":"iterateContainerSizes","offset":4641,"parameters":[{"name":"epoch","type":"Integer"},{"name":"cid","type":"Hash256"}],"returntype":"InteropInterface","safe":true},{"name":"list","offset":3748,"parameters":[{"name":"owner","type":"ByteArray"}],"returntype":"Array","safe":true},{"name":"listContainerSizes","offset":4480,"parameters":[{"name":"epoch","type":"Integer"}],"returntype":"Array","safe":true},{"name":"newEpoch","offset":4791,"parameters":[{"name":"epochNum","type":"Integer"}],"returntype":"Void","safe":false},{"name":"onNEP11Payment","offset":1670,"parameters":[{"name":"a","type":"Hash160"},{"name":"b","type":"Integer"},{"name":"c","type":"ByteArray"},{"name":"d","type":"Any"}],"returntype":"Void","safe":false},{"name":"owner","offset":3503,"parameters":[{"name":"containerID","type":"ByteArray"}],"returntype":"ByteArray","safe":true},{"name":"put","offset":2061,"parameters":[{"name":"container","type":"ByteArray"},{"name":"signature","type":"Signature"},{"name":"publicKey","type":"PublicKey"},{"name":"token","type":"ByteArray"}],"returntype":"Void","safe":false},{"name":"putContainerSize","offset":4164,"parameters":[{"name":"epoch","type":"Integer"},{"name":"cid","type":"ByteArray"},{"name":"usedSize","type":"Integer"},{"name":"pubKey","type":"PublicKey"}],"returntype":"Void","safe":false},{"name":"putNamed","offset":2077,"parameters":[{"name":"container","type":"ByteArray"},{"name":"signature","type":"Signature"},{"name":"publicKey","type":"PublicKey"},{"name":"token","type":"ByteArray"},{"name":"name","type":"String"},{"name":"zone","type":"String"}],"returntype":"Void","safe":false},{"name":"setEACL","offset":3844,"parameters":[{"name":"eACL","type":"ByteArray"},{"name":"signature","type":"Signature"},{"name":"publicKey","type":"PublicKey"},{"name":"token","type":"ByteArray"}],"returntype":"Void","safe":false},{"name":"startContainerEstimation","offset":4821,"parameters":[{"name":"epoch","type":"Integer"}],"returntype":"Void","safe":false},{"name":"stopContainerEstimation","offset":4902,"parameters":[{"name":"epoch","type":"Integer"}],"returntype":"Void","safe":false},{"name":"update","offset":1928,"parameters":[{"name":"script","type":"ByteArray"},{"name":"manifest","type":"ByteArray"},{"name":"data","type":"Any"}],"returntype":"Void","safe":false},{"name":"version","offset":4982,"parameters":[],"returntype":"Integer","safe":true}],"events":[{"name":"PutSuccess","parameters":[{"name":"containerID","type":"Hash256"},{"name":"publicKey","type":"PublicKey"}]},{"name":"DeleteSuccess","parameters":[{"name":"containerID","type":"ByteArray"}]},{"name":"SetEACLSuccess","parameters":[{"name":"containerID","type":"ByteArray"},{"name":"publicKey","type":"PublicKey"}]},{"name":"StartEstimation","parameters":[{"name":"epoch","type":"Integer"}]},{"name":"StopEstimation","parameters":[{"name":"epoch","type":"Integer"}]}]},"features":{},"groups":[],"permissions":[{"contract":"*","methods":["update","addKey","transferX","register","registerTLD","addRecord","deleteRecords","subscribeForNewEpoch"]}],"supportedstandards":[],"trusts":[],"extra":null} \ No newline at end of file diff --git a/contracts/07-container.nef b/contracts/07-container.nef deleted file mode 100755 index 384241bba5f7c91e4a962499821e0428f2d416ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6459 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 SHE5Rfo;CLK*BVl+mvMz0&(%Z$=&&U z@8#|s+m-l$1OgE>MENtOMft<_0YxB9K>0ACDJuik37lwONLMCp9V)C8O&Y9)q3(F@ z&c4K}$13v0dEfVWpMUT3`#sN%4nMkA!Q`PS^3Xv4o`IqM0qXzw>wNJ&-=5UIzS2wC zr+;_#c=#suOZ+;@6*Ubj#)!h>GDUejSHA!Dcg`HY>zkKOwp>5)2eUjjx;he>!p0G- zi&F|`VE$0$G?B3vWZ%zSOZ}?%;EAoRFF*Ng>(Ad?)Kl*wkUdNa1<^1twiMoa_JhNZ zUK{JX|JyG=^~O&x^NEYM%%Cl#7#f!|4pl~Y56G>&d!YK}pWnIvw-*+r%3DV|*Gcs! zKF%N_SfZL8h9)>2v-=MVIF~2_@vN<2b>_gn+G$alIxgx)mv|;U@#W8-u4PW8S2Q8> zDt+wO;I@n|W!B@q;R_idU!|+7+Fb0~@bIvdN_asVsP|H;5XcVE?!uoPYJr8f>?Sh2 z7+DIbX%Vk@&-&;YR z{#n!tOfjj?Qgk+Kh13SwA@U5a2crtLa5RXZRtI$7!{|O<&WOF9Pg(ab4M3F*l-fvJqLrFaT)(KU-h0tDQJDd7f=@gTvFMD9l_^6= zDs(k{eB|7pnu(|yo)pVTB}8?BO)E=f`{nmrDP@%pO;Z)p|LVE!9C_xF{X-}Ymu5s# z)R`Hq=^{~>f~XfbBPS#oTvl-osE>K%APC=+O>CiNlV#6=%)kNk;6|b83@2-t<16*F z$-tMoQCFB`;70AT?bCYP4?Ce13urbtYc&O%t5!{xhYqSxsMEA232su($F~VmRTlwr z3siKMFOZVvwAh>Q(m+x&G4yPD_Y=SQyB|XJY~DQgg}?5BO6u-{0mP%FN!u}zx7y4pgSY3cOU+k^X@(|bEy|z zxwpAM?eHnk6KnA=_dEyvP0%FUU^A|C3`(}arsv&#l54P;z()+m_o6r=u?|Ovr!$k zAher0AMJbrC|z7$?)e$~R)9*K2ilC#!N)e>3Jkm-?XAP1hS03Vw++^ye05+lhG+m- z8$!uguujac{Kqu4GCK!>EXVIbT`E?1OW0~L437=F+>;gHea9C)?-n3E_{hcreCbCI ze8iVgyE!yC<9e{Oe0wW!QdYM_uN3q32Gdn&pkO1p(KfF{5kT!_~I?f~l)N-6f15TG@48qiVHzRQJq=j8e2kbZI z6ts}QLMb4-nb=^e`BFOxkoKig2k8J)h#)WZJ+?F$uzz6PLC`{}6Ts}HUJFw59pRPI zR=N}^4MwzP|#2gD$zyg z3{Xi;Ed=LE!JYd|)1*rw657bm`JPuGBAJAsMTV)JK*gmn2|Lk6Ai9VfT>=f>S#-KV zG;Ydr%?d4YhoLp7|6idsst?VTLOTZ_uJUaoisZ~Ln^13&E?_wRpn#Z-($|Z?A-Xr+g`sF#K&?yg_^}cDA+T^>g)O5j_lB+c+?fUKdP`QsiW}&Uszv+3XOu!V zfhemv#CJ<5mSh?rX!SSVW-?n5d|ztLM?q|dgtjG}{^zFLDV2?{hFW#9J>XFarnJ=P I7q9I9FFtOQ?f?J) diff --git a/contracts/contracts.go b/contracts/contracts.go deleted file mode 100644 index 85548e2773..0000000000 --- a/contracts/contracts.go +++ /dev/null @@ -1,162 +0,0 @@ -/* -Package contracts embeds compiled Neo contracts and provides access to them. -*/ -package contracts - -import ( - "embed" - "encoding/json" - "errors" - "fmt" - "io/fs" - "sort" - "strconv" - "strings" - - "github.com/nspcc-dev/neo-go/pkg/io" - "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" - "github.com/nspcc-dev/neo-go/pkg/smartcontract/nef" -) - -// Contract groups information about Neo contract stored in the current package. -type Contract struct { - NEF nef.File - Manifest manifest.Manifest -} - -//go:embed *.nef *.manifest.json -var _fs embed.FS - -// Read reads compiled contracts stored in the package sorted numerically. -// File schema: -// - compiled executables (NEF) are named by pattern 'N-C.nef' -// - JSON-encoded manifests are named by pattern 'N-C.manifest.json' -// -// where C is the contract name (a-z) and N is the serial number of the contract -// starting from 0. Leading zeros are ignored (except zero sequence -// corresponding to N=0). -// -// If NEF file exists, corresponding manifest file must exist. If manifest -// file is presented without corresponding NEF file, the contract is ignored. -// -// Read fails if contract files has invalid name or format. -func Read() ([]Contract, error) { - return read(_fs) -} - -const nefFileSuffix = ".nef" - -var ( - errInvalidFilename = errors.New("invalid file name") - errDuplicatedContract = errors.New("duplicated contract") - errInvalidNEF = errors.New("invalid NEF") - errInvalidManifest = errors.New("invalid manifest") -) - -type numberedContract struct { - i int - c Contract -} - -type numberedContracts []numberedContract - -func (x numberedContracts) Len() int { return len(x) } -func (x numberedContracts) Less(i, j int) bool { return x[i].i < x[j].i } -func (x numberedContracts) Swap(i, j int) { x[i], x[j] = x[j], x[i] } - -// read same as Read by allows to override source fs.FS. -func read(_fs fs.FS) ([]Contract, error) { - nefFiles, err := fs.Glob(_fs, "*"+nefFileSuffix) - if err != nil { - return nil, fmt.Errorf("match files with suffix %s", nefFileSuffix) - } - - cs := make(numberedContracts, 0, len(nefFiles)) - - for i := range nefFiles { - prefix := strings.TrimSuffix(nefFiles[i], nefFileSuffix) - if prefix == "" { - return nil, fmt.Errorf("%w: missing prefix '%s'", errInvalidFilename, nefFiles[i]) - } - - hyphenInd := strings.IndexByte(prefix, '-') - if hyphenInd < 0 { - return nil, fmt.Errorf("%w: missing hyphen '%s'", errInvalidFilename, nefFiles[i]) - } - - name := prefix[hyphenInd+1:] - if len(name) == 0 { - return nil, fmt.Errorf("%w: missing name '%s'", errInvalidFilename, nefFiles[i]) - } - - for i := range name { - if name[i] < 'a' || name[i] > 'z' { - return nil, fmt.Errorf("%w: unsupported char in name %c", errInvalidFilename, name[i]) - } - } - - var ind int - - if noZerosPrefix := strings.TrimLeft(prefix[:hyphenInd], "0"); len(noZerosPrefix) > 0 { - ind, err = strconv.Atoi(noZerosPrefix) - if err != nil { - return nil, fmt.Errorf("%w: invalid prefix of file name '%s' (expected serial number)", errInvalidFilename, nefFiles[i]) - } else if ind < 0 { - return nil, fmt.Errorf("%w: negative serial number in file name '%s'", errInvalidFilename, nefFiles[i]) - } - } - - for i := range cs { - if cs[i].i == ind { - return nil, fmt.Errorf("%w: more than one file with serial number #%d", errDuplicatedContract, ind) - } - } - - c, err := readContractFromFiles(_fs, prefix) - if err != nil { - return nil, fmt.Errorf("read contract #%d: %w", ind, err) - } - - cs = append(cs, numberedContract{ - i: ind, - c: c, - }) - } - - sort.Sort(cs) - - res := make([]Contract, len(cs)) - - for i := range cs { - res[i] = cs[i].c - } - - return res, nil -} - -func readContractFromFiles(_fs fs.FS, filePrefix string) (c Contract, err error) { - fNEF, err := _fs.Open(filePrefix + nefFileSuffix) - if err != nil { - return c, fmt.Errorf("open file containing contract NEF: %w", err) - } - defer fNEF.Close() - - fManifest, err := _fs.Open(filePrefix + ".manifest.json") - if err != nil { - return c, fmt.Errorf("open file containing contract NEF: %w", err) - } - defer fManifest.Close() - - bReader := io.NewBinReaderFromIO(fNEF) - c.NEF.DecodeBinary(bReader) - if bReader.Err != nil { - return c, fmt.Errorf("%w: %w", errInvalidNEF, bReader.Err) - } - - err = json.NewDecoder(fManifest).Decode(&c.Manifest) - if err != nil { - return c, fmt.Errorf("%w: %w", errInvalidManifest, err) - } - - return -} diff --git a/contracts/contracts_test.go b/contracts/contracts_test.go deleted file mode 100644 index afadb0e71f..0000000000 --- a/contracts/contracts_test.go +++ /dev/null @@ -1,130 +0,0 @@ -package contracts - -import ( - "crypto/rand" - "encoding/json" - "testing" - "testing/fstest" - - "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" - "github.com/nspcc-dev/neo-go/pkg/smartcontract/nef" - "github.com/stretchr/testify/require" -) - -func TestReadRepo(t *testing.T) { - _, err := Read() - require.NoError(t, err) -} - -func TestReadOrder(t *testing.T) { - _nef0, bNEF0 := anyValidNEF(t) - _manifest0, jManifest0 := anyValidManifest(t, "first") - _nef1, bNEF1 := anyValidNEF(t) - _manifest1, jManifest1 := anyValidManifest(t, "second") - _nef11, bNEF11 := anyValidNEF(t) - _manifest11, jManifest11 := anyValidManifest(t, "twelfth") - - _fs := fstest.MapFS{ - "00-hello.nef": {Data: bNEF0}, - "00-hello.manifest.json": {Data: jManifest0}, - "01-world.nef": {Data: bNEF1}, - "01-world.manifest.json": {Data: jManifest1}, - "11-bye.nef": {Data: bNEF11}, - "11-bye.manifest.json": {Data: jManifest11}, - } - - cs, err := read(_fs) - require.NoError(t, err) - require.Len(t, cs, 3) - - require.Equal(t, _nef0, cs[0].NEF) - require.Equal(t, _manifest0, cs[0].Manifest) - require.Equal(t, _nef1, cs[1].NEF) - require.Equal(t, _manifest1, cs[1].Manifest) - require.Equal(t, _nef11, cs[2].NEF) - require.Equal(t, _manifest11, cs[2].Manifest) -} - -func TestReadInvalidFilenames(t *testing.T) { - _fs := fstest.MapFS{} - - _, err := read(_fs) - require.NoError(t, err) - - for _, invalidName := range []string{ - "hello.nef", - "-.nef", - "-0.nef", - "0-.nef", - "0-_.nef", - "0-1.nef", - ".nef", - } { - _fs[invalidName] = &fstest.MapFile{} - _, err = read(_fs) - require.ErrorIs(t, err, errInvalidFilename, invalidName) - delete(_fs, invalidName) - } -} - -func TestReadDuplicatedContract(t *testing.T) { - _, bNEF := anyValidNEF(t) - _, jManifest := anyValidManifest(t, "some name") - - _fs := fstest.MapFS{ - "01-hello.nef": {Data: bNEF}, - "01-hello.manifest.json": {Data: jManifest}, - "001-hello.nef": {Data: bNEF}, - "001-hello.manifest.json": {Data: jManifest}, - } - - _, err := read(_fs) - require.ErrorIs(t, err, errDuplicatedContract) -} - -func TestReadInvalidFormat(t *testing.T) { - _fs := fstest.MapFS{} - - _, validNEF := anyValidNEF(t) - _, validManifest := anyValidManifest(t, "zero") - - _fs["00-hello.nef"] = &fstest.MapFile{Data: validNEF} - _fs["00-hello.manifest.json"] = &fstest.MapFile{Data: validManifest} - - _, err := read(_fs) - require.NoError(t, err, errInvalidNEF) - - _fs["00-hello.nef"] = &fstest.MapFile{Data: []byte("not a NEF")} - _fs["00-hello.manifest.json"] = &fstest.MapFile{Data: validManifest} - - _, err = read(_fs) - require.ErrorIs(t, err, errInvalidNEF) - - _fs["00-hello.nef"] = &fstest.MapFile{Data: validNEF} - _fs["00-hello.manifest.json"] = &fstest.MapFile{Data: []byte("not a manifest")} - - _, err = read(_fs) - require.ErrorIs(t, err, errInvalidManifest) -} - -func anyValidNEF(tb testing.TB) (nef.File, []byte) { - script := make([]byte, 32) - rand.Read(script) - - _nef, err := nef.NewFile(script) - require.NoError(tb, err) - - bNEF, err := _nef.Bytes() - require.NoError(tb, err) - - return *_nef, bNEF -} - -func anyValidManifest(tb testing.TB, name string) (manifest.Manifest, []byte) { - _manifest := manifest.NewManifest(name) - - jManifest, err := json.Marshal(_manifest) - require.NoError(tb, err) - - return *_manifest, jManifest -} diff --git a/go.mod b/go.mod index b1df1f40c6..cac4449df0 100644 --- a/go.mod +++ b/go.mod @@ -15,9 +15,9 @@ require ( github.com/multiformats/go-multiaddr v0.12.2 github.com/nspcc-dev/hrw/v2 v2.0.1 github.com/nspcc-dev/locode-db v0.6.0 - github.com/nspcc-dev/neo-go v0.106.2 + github.com/nspcc-dev/neo-go v0.106.3 github.com/nspcc-dev/neofs-api-go/v2 v2.14.1-0.20240305074711-35bc78d84dc4 - github.com/nspcc-dev/neofs-contract v0.19.2-0.20240506202632-e78d64ecdfc2 + github.com/nspcc-dev/neofs-contract v0.20.0 github.com/nspcc-dev/neofs-sdk-go v1.0.0-rc.12 github.com/nspcc-dev/tzhash v1.8.0 github.com/olekukonko/tablewriter v0.0.5 @@ -47,7 +47,7 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/consensys/bavard v0.1.13 // indirect github.com/consensys/gnark-crypto v0.12.2-0.20231013160410-1f65e75b6dfb // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect @@ -72,7 +72,7 @@ require ( github.com/multiformats/go-varint v0.0.7 // indirect github.com/nspcc-dev/dbft v0.2.0 // indirect github.com/nspcc-dev/go-ordered-json v0.0.0-20240301084351-0246b013f8b2 // indirect - github.com/nspcc-dev/neo-go/pkg/interop v0.0.0-20240521091047-78685785716d // indirect + github.com/nspcc-dev/neo-go/pkg/interop v0.0.0-20240729160116-d8e3e57f88f2 // indirect github.com/nspcc-dev/rfc6979 v0.2.1 // indirect github.com/pelletier/go-toml/v2 v2.1.1 // indirect github.com/pierrec/lz4 v2.6.1+incompatible // indirect @@ -90,7 +90,8 @@ require ( github.com/subosito/gotenv v1.6.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954 // indirect github.com/twmb/murmur3 v1.1.8 // indirect - github.com/urfave/cli v1.22.14 // indirect + github.com/urfave/cli/v2 v2.27.2 // indirect + github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.21.0 // indirect golang.org/x/text v0.14.0 // indirect diff --git a/go.sum b/go.sum index 68088f680e..efc571159c 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,3 @@ -github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20221202181307-76fa05c21b12 h1:npHgfD4Tl2WJS3AJaMUi5ynGDPUBfkg3U3fCzDyXZ+4= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20221202181307-76fa05c21b12/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -19,9 +18,9 @@ github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/Yj github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= github.com/consensys/gnark-crypto v0.12.2-0.20231013160410-1f65e75b6dfb h1:f0BMgIjhZy4lSRHCXFbQst85f5agZAjtDMixQqBWNpc= github.com/consensys/gnark-crypto v0.12.2-0.20231013160410-1f65e75b6dfb/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -128,14 +127,14 @@ github.com/nspcc-dev/hrw/v2 v2.0.1 h1:CxYUkBeJvNfMEn2lHhrV6FjY8pZPceSxXUtMVq0BUO github.com/nspcc-dev/hrw/v2 v2.0.1/go.mod h1:iZAs5hT2q47EGq6AZ0FjaUI6ggntOi7vrY4utfzk5VA= github.com/nspcc-dev/locode-db v0.6.0 h1:EdRUug+sL0EMLZgucLETD6bnegKjyEZh+D5x4r5VMvY= github.com/nspcc-dev/locode-db v0.6.0/go.mod h1:mJLXdzlcRucr3AFUvf5fJH+rFv1bJuU85e1jtDHDTz8= -github.com/nspcc-dev/neo-go v0.106.2 h1:KXSJ2J5Oacc7LrX3r4jvnC8ihKqHs5NB21q4f2S3r9o= -github.com/nspcc-dev/neo-go v0.106.2/go.mod h1:Ojwfx3/lv0VTeEHMpQ17g0wTnXcCSoFQVq5GEeCZmGo= -github.com/nspcc-dev/neo-go/pkg/interop v0.0.0-20240521091047-78685785716d h1:Vcb7YkZuUSSIC+WF/xV3UDfHbAxZgyT2zGleJP3Ig5k= -github.com/nspcc-dev/neo-go/pkg/interop v0.0.0-20240521091047-78685785716d/go.mod h1:/vrbWSHc7YS1KSYhVOyyeucXW/e+1DkVBOgnBEXUCeY= +github.com/nspcc-dev/neo-go v0.106.3 h1:HEyhgkjQY+HfBzotMJ12xx2VuOUphkngZ4kEkjvXDtE= +github.com/nspcc-dev/neo-go v0.106.3/go.mod h1:3vEwJ2ld12N7HRGCaH/l/7EwopplC/+8XdIdPDNmD/M= +github.com/nspcc-dev/neo-go/pkg/interop v0.0.0-20240729160116-d8e3e57f88f2 h1:tvPkeqnIeBFhM1b1Iwwi0jJiuoxkY4Xbk8mP3W1YVUY= +github.com/nspcc-dev/neo-go/pkg/interop v0.0.0-20240729160116-d8e3e57f88f2/go.mod h1:/vrbWSHc7YS1KSYhVOyyeucXW/e+1DkVBOgnBEXUCeY= github.com/nspcc-dev/neofs-api-go/v2 v2.14.1-0.20240305074711-35bc78d84dc4 h1:arN0Ypn+jawZpu1BND7TGRn44InAVIqKygndsx0y2no= github.com/nspcc-dev/neofs-api-go/v2 v2.14.1-0.20240305074711-35bc78d84dc4/go.mod h1:7Tm1NKEoUVVIUlkVwFrPh7GG5+Lmta2m7EGr4oVpBd8= -github.com/nspcc-dev/neofs-contract v0.19.2-0.20240506202632-e78d64ecdfc2 h1:VT9/vs92xth7c2PIxiGt1NIK77VK2kjSFqLMWmMY/pc= -github.com/nspcc-dev/neofs-contract v0.19.2-0.20240506202632-e78d64ecdfc2/go.mod h1:5nBFjgF2/SNpEty5oZzfTLck3YCSHLgnL4Tlv2xo54c= +github.com/nspcc-dev/neofs-contract v0.20.0 h1:ARE/3mSN+P9qi/10NBsf7QyPiYrvnxeEgYUN13vHRlo= +github.com/nspcc-dev/neofs-contract v0.20.0/go.mod h1:YxtKYE/5cMNiqwWcQWzeizbB9jizauLni+p8wXxfhsQ= github.com/nspcc-dev/neofs-sdk-go v1.0.0-rc.12 h1:mdxtlSU2I4oVZ/7AXTLKyz8uUPbDWikZw4DM8gvrddA= github.com/nspcc-dev/neofs-sdk-go v1.0.0-rc.12/go.mod h1:JdsEM1qgNukrWqgOBDChcYp8oY4XUzidcKaxY4hNJvQ= github.com/nspcc-dev/rfc6979 v0.2.1 h1:8wWxkamHWFmO790GsewSoKUSJjVnL1fmdRpokU/RgRM= @@ -209,8 +208,10 @@ github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954 h1:xQdMZ1WLrgkk github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/twmb/murmur3 v1.1.8 h1:8Yt9taO/WN3l08xErzjeschgZU2QSrwm1kclYq+0aRg= github.com/twmb/murmur3 v1.1.8/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= -github.com/urfave/cli v1.22.14 h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk= -github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOHLvkA= +github.com/urfave/cli/v2 v2.27.2 h1:6e0H+AkS+zDckwPCUrZkKX38mRaau4nL2uipkJpbkcI= +github.com/urfave/cli/v2 v2.27.2/go.mod h1:g0+79LmHHATl7DAcHO99smiR/T7uGLw84w8Y42x+4eM= +github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 h1:+qGGcbkzsfDQNPPe9UDgpxAWQrhbbBXOYJFQDq/dtJw= +github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913/go.mod h1:4aEEwZQutDLsQv2Deui4iYQ6DWTxR14g6m8Wv88+Xqk= go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI= go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -294,7 +295,6 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWD gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/innerring/contracts.go b/pkg/innerring/contracts.go index 4568a956ee..f8af6a3f99 100644 --- a/pkg/innerring/contracts.go +++ b/pkg/innerring/contracts.go @@ -9,8 +9,8 @@ import ( "github.com/nspcc-dev/neo-go/pkg/neorpc" "github.com/nspcc-dev/neo-go/pkg/util" + embeddedcontracts "github.com/nspcc-dev/neofs-contract/contracts" "github.com/nspcc-dev/neofs-contract/deploy" - embeddedcontracts "github.com/nspcc-dev/neofs-node/contracts" "github.com/nspcc-dev/neofs-node/pkg/morph/client" "github.com/nspcc-dev/neofs-node/pkg/util/glagolitsa" "github.com/spf13/cast" @@ -207,7 +207,7 @@ func parseContract(ctx *nnsContext, _logger *zap.Logger, cfg *viper.Viper, morph } func readEmbeddedContracts(deployPrm *deploy.Prm) error { - cs, err := embeddedcontracts.Read() + cs, err := embeddedcontracts.GetFS() if err != nil { return fmt.Errorf("read embedded contracts: %w", err) } diff --git a/pkg/morph/client/container/get.go b/pkg/morph/client/container/get.go index a2542e7fed..94c5c3f27f 100644 --- a/pkg/morph/client/container/get.go +++ b/pkg/morph/client/container/get.go @@ -5,7 +5,7 @@ import ( "fmt" "strings" - containerContract "github.com/nspcc-dev/neofs-contract/contracts/container" + containerrpc "github.com/nspcc-dev/neofs-contract/rpc/container" containercore "github.com/nspcc-dev/neofs-node/pkg/core/container" "github.com/nspcc-dev/neofs-node/pkg/morph/client" apistatus "github.com/nspcc-dev/neofs-sdk-go/client/status" @@ -45,7 +45,7 @@ func (c *Client) Get(cid []byte) (*containercore.Container, error) { res, err := c.client.TestInvoke(prm) if err != nil { - if strings.Contains(err.Error(), containerContract.NotFoundError) { + if strings.Contains(err.Error(), containerrpc.NotFoundError) { var errNotFound apistatus.ContainerNotFound return nil, errNotFound diff --git a/pkg/morph/client/netmap/netmap.go b/pkg/morph/client/netmap/netmap.go index 52e682e7b2..1899f3faf9 100644 --- a/pkg/morph/client/netmap/netmap.go +++ b/pkg/morph/client/netmap/netmap.go @@ -4,7 +4,7 @@ import ( "fmt" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" - netmapcontract "github.com/nspcc-dev/neofs-contract/contracts/netmap" + netmaprpc "github.com/nspcc-dev/neofs-contract/rpc/netmap" "github.com/nspcc-dev/neofs-node/pkg/morph/client" "github.com/nspcc-dev/neofs-sdk-go/netmap" ) @@ -102,29 +102,14 @@ func decodeNodeList(itemNodes stackitem.Item) ([]netmap.NodeInfo, error) { } func decodeNodeInfo(dst *netmap.NodeInfo, itemNode stackitem.Item) error { - nodeFields, err := client.ArrayFromStackItem(itemNode) - if err != nil { - return fmt.Errorf("decode item array of node fields: %w", err) - } - - var node netmapcontract.Node - - if len(nodeFields) > 0 { - node.BLOB, err = client.BytesFromStackItem(nodeFields[0]) - if err != nil { - return fmt.Errorf("decode node info BLOB: %w", err) - } - } - - node.State = netmapcontract.NodeStateOnline - - if len(nodeFields) > 1 { - state, err := client.IntFromStackItem(nodeFields[1]) - if err != nil { - return fmt.Errorf("decode integer from 2nd item: %w", err) - } + var ( + err error + node netmaprpc.NetmapNode + ) - node.State = netmapcontract.NodeState(state) + err = node.FromStackItem(itemNode) + if err != nil { + return fmt.Errorf("decode node item: %w", err) } err = dst.Unmarshal(node.BLOB) @@ -132,14 +117,14 @@ func decodeNodeInfo(dst *netmap.NodeInfo, itemNode stackitem.Item) error { return fmt.Errorf("decode node info: %w", err) } - switch node.State { + switch node.State.Int64() { default: return fmt.Errorf("unsupported state %v", node.State) - case netmapcontract.NodeStateOnline: + case netmaprpc.NodeStateOnline.Int64(): dst.SetOnline() - case netmapcontract.NodeStateOffline: + case netmaprpc.NodeStateOffline.Int64(): dst.SetOffline() - case netmapcontract.NodeStateMaintenance: + case netmaprpc.NodeStateMaintenance.Int64(): dst.SetMaintenance() } diff --git a/pkg/morph/client/netmap/netmap_test.go b/pkg/morph/client/netmap/netmap_test.go index 8243cba0a8..51be127708 100644 --- a/pkg/morph/client/netmap/netmap_test.go +++ b/pkg/morph/client/netmap/netmap_test.go @@ -7,7 +7,7 @@ import ( "testing" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" - netmapcontract "github.com/nspcc-dev/neofs-contract/contracts/netmap" + "github.com/nspcc-dev/neofs-contract/contracts/netmap/nodestate" "github.com/nspcc-dev/neofs-sdk-go/netmap" "github.com/stretchr/testify/require" ) @@ -22,9 +22,9 @@ func Test_stackItemsToNodeInfos(t *testing.T) { switch i % 3 { default: expected[i].SetOffline() - case int(netmapcontract.NodeStateOnline): + case int(nodestate.Online): expected[i].SetOnline() - case int(netmapcontract.NodeStateMaintenance): + case int(nodestate.Maintenance): expected[i].SetMaintenance() } @@ -41,11 +41,11 @@ func Test_stackItemsToNodeInfos(t *testing.T) { switch { case expected[i].IsOnline(): - state = int64(netmapcontract.NodeStateOnline) + state = int64(nodestate.Online) case expected[i].IsOffline(): - state = int64(netmapcontract.NodeStateOffline) + state = int64(nodestate.Offline) case expected[i].IsMaintenance(): - state = int64(netmapcontract.NodeStateMaintenance) + state = int64(nodestate.Maintenance) } items[i] = stackitem.NewStruct([]stackitem.Item{ diff --git a/pkg/morph/client/netmap/update_state.go b/pkg/morph/client/netmap/update_state.go index c06ed501d1..f19a155df4 100644 --- a/pkg/morph/client/netmap/update_state.go +++ b/pkg/morph/client/netmap/update_state.go @@ -2,8 +2,9 @@ package netmap import ( "fmt" + "math/big" - "github.com/nspcc-dev/neofs-contract/contracts/netmap" + "github.com/nspcc-dev/neofs-contract/rpc/netmap" "github.com/nspcc-dev/neofs-node/pkg/morph/client" ) @@ -11,7 +12,7 @@ import ( type UpdatePeerPrm struct { key []byte - state netmap.NodeState + state *big.Int client.InvokePrmOptional } @@ -37,13 +38,13 @@ func (u *UpdatePeerPrm) SetMaintenance() { // UpdatePeerState changes peer status through Netmap contract call. func (c *Client) UpdatePeerState(p UpdatePeerPrm) error { - if p.state == 0 { + if p.state == nil || p.state.Sign() == 0 { p.state = netmap.NodeStateOffline } prm := client.InvokePrm{} prm.SetMethod(updateStateMethod) - prm.SetArgs(int64(p.state), p.key) + prm.SetArgs(p.state, p.key) prm.InvokePrmOptional = p.InvokePrmOptional if err := c.client.Invoke(prm); err != nil { diff --git a/pkg/morph/event/netmap/update_peer.go b/pkg/morph/event/netmap/update_peer.go index 081fde751f..d1ea0860de 100644 --- a/pkg/morph/event/netmap/update_peer.go +++ b/pkg/morph/event/netmap/update_peer.go @@ -5,13 +5,13 @@ import ( "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/network/payload" - "github.com/nspcc-dev/neofs-contract/contracts/netmap" + "github.com/nspcc-dev/neofs-contract/contracts/netmap/nodestate" ) type UpdatePeer struct { publicKey *keys.PublicKey - state netmap.NodeState + state nodestate.Type // For notary notifications only. // Contains raw transactions of notary request. @@ -24,13 +24,13 @@ func (UpdatePeer) MorphEvent() {} // Online returns true if node's state is requested to be switched // to "online". func (s UpdatePeer) Online() bool { - return s.state == netmap.NodeStateOnline + return s.state == nodestate.Online } // Maintenance returns true if node's state is requested to be switched // to "maintenance". func (s UpdatePeer) Maintenance() bool { - return s.state == netmap.NodeStateMaintenance + return s.state == nodestate.Maintenance } func (s UpdatePeer) PublicKey() *keys.PublicKey { @@ -44,13 +44,13 @@ func (s UpdatePeer) NotaryRequest() *payload.P2PNotaryRequest { } func (s *UpdatePeer) decodeState(state int64) error { - switch s.state = netmap.NodeState(state); s.state { + switch s.state = nodestate.Type(state); s.state { default: return fmt.Errorf("unsupported node state %d", state) case - netmap.NodeStateOffline, - netmap.NodeStateOnline, - netmap.NodeStateMaintenance: + nodestate.Offline, + nodestate.Online, + nodestate.Maintenance: return nil } }