[#156] container: fix domain owner check

Container contract owns all registered domains.

Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
Evgenii Stratonikov 2021-10-21 18:59:59 +03:00 committed by Alex Vanin
parent b57f2ffe6b
commit 8c8e4a6d85
2 changed files with 9 additions and 3 deletions

View file

@ -272,8 +272,8 @@ func checkNiceNameAvailable(nnsContractAddr interop.Hash160, domain string) bool
owner := contract.Call(nnsContractAddr, "ownerOf",
contract.ReadStates|contract.AllowCall, domain).(string)
if string(owner) != string(common.CommitteeAddress()) {
panic("committee must own registered domain")
if owner != string(common.CommitteeAddress()) && owner != string(runtime.GetExecutingScriptHash()) {
panic("committee or container contract must own registered domain")
}
res := contract.Call(nnsContractAddr, "getRecords",

View file

@ -117,6 +117,12 @@ func TestContainerPut(t *testing.T) {
stackitem.NewByteArray([]byte(base58.Encode(c.id[:]))),
}))
t.Run("name is already taken", func(t *testing.T) {
tx = PrepareInvoke(t, bc, CommitteeAcc, h, "putNamed", putArgs...)
AddBlock(t, bc, tx)
CheckFault(t, bc, tx.Hash(), "name is already taken")
})
tx = PrepareInvoke(t, bc, CommitteeAcc, h, "delete", c.id[:], c.sig, c.token)
AddBlockCheckHalt(t, bc, tx)
@ -136,7 +142,7 @@ func TestContainerPut(t *testing.T) {
tx = PrepareInvoke(t, bc, acc, h, "putNamed",
c.value, c.sig, c.pub, c.token, "baddomain", "neofs")
AddBlock(t, bc, tx)
CheckFault(t, bc, tx.Hash(), "committee must own registered domain")
CheckFault(t, bc, tx.Hash(), "committee or container contract must own registered domain")
})
tx = PrepareInvoke(t, bc, CommitteeAcc, nnsHash, "register",