From edd4864e397f86cfe472bd81f1e56f5d8c7c36ef Mon Sep 17 00:00:00 2001 From: Alex Vanin Date: Tue, 21 Sep 2021 15:58:37 +0300 Subject: [PATCH] [#130] Panic at contract update failures There is no practical cases not to panic at contract update routine. Signed-off-by: Alex Vanin --- alphabet/alphabet_contract.go | 7 ++----- audit/audit_contract.go | 7 ++----- balance/balance_contract.go | 7 ++----- container/container_contract.go | 7 ++----- neofs/neofs_contract.go | 7 ++----- neofsid/neofsid_contract.go | 7 ++----- netmap/netmap_contract.go | 7 ++----- processing/processing_contract.go | 7 ++----- proxy/proxy_contract.go | 7 ++----- reputation/reputation_contract.go | 7 ++----- 10 files changed, 20 insertions(+), 50 deletions(-) diff --git a/alphabet/alphabet_contract.go b/alphabet/alphabet_contract.go index 0ddf743..e481ea4 100644 --- a/alphabet/alphabet_contract.go +++ b/alphabet/alphabet_contract.go @@ -75,18 +75,15 @@ func _deploy(data interface{}, isUpdate bool) { // Update method updates contract source code and manifest. Can be invoked // only by contract owner. -func Update(script []byte, manifest []byte, data interface{}) bool { +func Update(script []byte, manifest []byte, data interface{}) { ctx := storage.GetReadOnlyContext() if !common.HasUpdateAccess(ctx) { - runtime.Log("only owner can update contract") - return false + panic("only owner can update contract") } contract.Call(interop.Hash160(management.Hash), "update", contract.All, script, manifest, data) runtime.Log("alphabet contract updated") - - return true } // GAS returns amount of side chain GAS stored in contract account. diff --git a/audit/audit_contract.go b/audit/audit_contract.go index 9477029..868d6c5 100644 --- a/audit/audit_contract.go +++ b/audit/audit_contract.go @@ -75,18 +75,15 @@ func _deploy(data interface{}, isUpdate bool) { // Update method updates contract source code and manifest. Can be invoked // only by contract owner. -func Update(script []byte, manifest []byte, data interface{}) bool { +func Update(script []byte, manifest []byte, data interface{}) { ctx := storage.GetReadOnlyContext() if !common.HasUpdateAccess(ctx) { - runtime.Log("only owner can update contract") - return false + panic("only owner can update contract") } contract.Call(interop.Hash160(management.Hash), "update", contract.All, script, manifest, data) runtime.Log("audit contract updated") - - return true } // Put method stores stable marshalled `DataAuditResult` structure. Can be diff --git a/balance/balance_contract.go b/balance/balance_contract.go index e699dc1..58d96f0 100644 --- a/balance/balance_contract.go +++ b/balance/balance_contract.go @@ -95,18 +95,15 @@ func _deploy(data interface{}, isUpdate bool) { // Update method updates contract source code and manifest. Can be invoked // only by contract owner. -func Update(script []byte, manifest []byte, data interface{}) bool { +func Update(script []byte, manifest []byte, data interface{}) { ctx := storage.GetReadOnlyContext() if !common.HasUpdateAccess(ctx) { - runtime.Log("only owner can update contract") - return false + panic("only owner can update contract") } contract.Call(interop.Hash160(management.Hash), "update", contract.All, script, manifest, data) runtime.Log("balance contract updated") - - return true } // Symbol is a NEP-17 standard method that returns NEOFS token symbol. diff --git a/container/container_contract.go b/container/container_contract.go index fed55ed..4fcb3d4 100644 --- a/container/container_contract.go +++ b/container/container_contract.go @@ -100,18 +100,15 @@ func _deploy(data interface{}, isUpdate bool) { // Update method updates contract source code and manifest. Can be invoked // only by contract owner. -func Update(script []byte, manifest []byte, data interface{}) bool { +func Update(script []byte, manifest []byte, data interface{}) { ctx := storage.GetReadOnlyContext() if !common.HasUpdateAccess(ctx) { - runtime.Log("only owner can update contract") - return false + panic("only owner can update contract") } contract.Call(interop.Hash160(management.Hash), "update", contract.All, script, manifest, data) runtime.Log("container contract updated") - - return true } // Put method creates new container if it was invoked by Alphabet nodes diff --git a/neofs/neofs_contract.go b/neofs/neofs_contract.go index 0a3b64f..da3b268 100644 --- a/neofs/neofs_contract.go +++ b/neofs/neofs_contract.go @@ -111,18 +111,15 @@ func _deploy(data interface{}, isUpdate bool) { // Update method updates contract source code and manifest. Can be invoked // only by contract owner. -func Update(script []byte, manifest []byte, data interface{}) bool { +func Update(script []byte, manifest []byte, data interface{}) { ctx := storage.GetReadOnlyContext() if !common.HasUpdateAccess(ctx) { - runtime.Log("only owner can update contract") - return false + panic("only owner can update contract") } contract.Call(interop.Hash160(management.Hash), "update", contract.All, script, manifest, data) runtime.Log("neofs contract updated") - - return true } // AlphabetList returns array of alphabet node keys. Use in side chain notary diff --git a/neofsid/neofsid_contract.go b/neofsid/neofsid_contract.go index 285ce20..71c551c 100644 --- a/neofsid/neofsid_contract.go +++ b/neofsid/neofsid_contract.go @@ -60,18 +60,15 @@ func _deploy(data interface{}, isUpdate bool) { // Update method updates contract source code and manifest. Can be invoked // only by contract owner. -func Update(script []byte, manifest []byte, data interface{}) bool { +func Update(script []byte, manifest []byte, data interface{}) { ctx := storage.GetReadOnlyContext() if !common.HasUpdateAccess(ctx) { - runtime.Log("only owner can update contract") - return false + panic("only owner can update contract") } contract.Call(interop.Hash160(management.Hash), "update", contract.All, script, manifest, data) runtime.Log("neofsid contract updated") - - return true } // AddKey binds list of provided public keys to OwnerID. Can be invoked only by diff --git a/netmap/netmap_contract.go b/netmap/netmap_contract.go index 82a25bb..63b6caf 100644 --- a/netmap/netmap_contract.go +++ b/netmap/netmap_contract.go @@ -125,18 +125,15 @@ func _deploy(data interface{}, isUpdate bool) { // Update method updates contract source code and manifest. Can be invoked // only by contract owner. -func Update(script []byte, manifest []byte, data interface{}) bool { +func Update(script []byte, manifest []byte, data interface{}) { ctx := storage.GetReadOnlyContext() if !common.HasUpdateAccess(ctx) { - runtime.Log("only owner can update contract") - return false + panic("only owner can update contract") } contract.Call(interop.Hash160(management.Hash), "update", contract.All, script, manifest, data) runtime.Log("netmap contract updated") - - return true } // InnerRingList method returns slice of structures that contains public key of diff --git a/processing/processing_contract.go b/processing/processing_contract.go index 208b0eb..1621672 100644 --- a/processing/processing_contract.go +++ b/processing/processing_contract.go @@ -51,18 +51,15 @@ func _deploy(data interface{}, isUpdate bool) { // Update method updates contract source code and manifest. Can be invoked // only by contract owner. -func Update(script []byte, manifest []byte, data interface{}) bool { +func Update(script []byte, manifest []byte, data interface{}) { ctx := storage.GetReadOnlyContext() if !common.HasUpdateAccess(ctx) { - runtime.Log("only owner can update contract") - return false + panic("only owner can update contract") } contract.Call(interop.Hash160(management.Hash), "update", contract.All, script, manifest, data) runtime.Log("processing contract updated") - - return true } // Verify method returns true if transaction contains valid multi signature of diff --git a/proxy/proxy_contract.go b/proxy/proxy_contract.go index 2a53596..c260f07 100644 --- a/proxy/proxy_contract.go +++ b/proxy/proxy_contract.go @@ -50,18 +50,15 @@ func _deploy(data interface{}, isUpdate bool) { // Update method updates contract source code and manifest. Can be invoked // only by contract owner. -func Update(script []byte, manifest []byte, data interface{}) bool { +func Update(script []byte, manifest []byte, data interface{}) { ctx := storage.GetReadOnlyContext() if !common.HasUpdateAccess(ctx) { - runtime.Log("only owner can update contract") - return false + panic("only owner can update contract") } contract.Call(interop.Hash160(management.Hash), "update", contract.All, script, manifest, data) runtime.Log("proxy contract updated") - - return true } // Verify method returns true if transaction contains valid multi signature of diff --git a/reputation/reputation_contract.go b/reputation/reputation_contract.go index a373d77..9078965 100644 --- a/reputation/reputation_contract.go +++ b/reputation/reputation_contract.go @@ -44,18 +44,15 @@ func _deploy(data interface{}, isUpdate bool) { // Update method updates contract source code and manifest. Can be invoked // only by contract owner. -func Update(script []byte, manifest []byte, data interface{}) bool { +func Update(script []byte, manifest []byte, data interface{}) { ctx := storage.GetReadOnlyContext() if !common.HasUpdateAccess(ctx) { - runtime.Log("only owner can update contract") - return false + panic("only owner can update contract") } contract.Call(interop.Hash160(management.Hash), "update", contract.All, script, manifest, data) runtime.Log("reputation contract updated") - - return true } // Put method saves DataAuditResult in contract storage. Can be invoked only by