From a2c985ae4b78ee954106da8e4bac54e5cfc10021 Mon Sep 17 00:00:00 2001 From: Alex Vanin Date: Tue, 15 Jun 2021 15:34:45 +0300 Subject: [PATCH] [#92] container: Add balance check before new container notification Balance check at container.Put command will drop some invalid transactions from the side chain network before inner ring approval. Signed-off-by: Alex Vanin --- container/container_contract.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/container/container_contract.go b/container/container_contract.go index 9fe1215..91b2df2 100644 --- a/container/container_contract.go +++ b/container/container_contract.go @@ -144,17 +144,20 @@ func Put(container []byte, signature interop.Signature, publicKey interop.Public alphabetCall = runtime.CheckWitness(multiaddr) } - if !alphabetCall { - runtime.Notify("containerPut", container, signature, publicKey, token) - return - } - from := common.WalletToScriptHash(ownerID) netmapContractAddr := storage.Get(ctx, netmapContractKey).(interop.Hash160) balanceContractAddr := storage.Get(ctx, balanceContractKey).(interop.Hash160) containerFee := contract.Call(netmapContractAddr, "config", contract.ReadOnly, containerFeeKey).(int) + balance := contract.Call(balanceContractAddr, "balanceOf", contract.ReadOnly, from).(int) details := common.ContainerFeeTransferDetails(containerID) + if !alphabetCall { + if balance < containerFee*len(alphabet) { + panic("insufficient balance to create container") + } + runtime.Notify("containerPut", container, signature, publicKey, token) + return + } // todo: check if new container with unique container id if notaryDisabled {