Skip to content

Commit

Permalink
[#139] nns: require admin signature for registering subdomain
Browse files Browse the repository at this point in the history
Signed-off-by: Evgenii Stratonikov <[email protected]>
  • Loading branch information
fyrchik committed Oct 26, 2021
1 parent 4b86891 commit 14fc086
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 3 deletions.
4 changes: 4 additions & 0 deletions nns/nns_contract.go
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,10 @@ func Register(name string, owner interop.Hash160, email string, refresh, retry,
if parentExpired(ctx, 1, fragments) {
panic("one of the parent domains has expired")
}
parentKey := getTokenKey([]byte(fragments[1]))
nsBytes := storage.Get(ctx, append([]byte{prefixName}, parentKey...))
ns := std.Deserialize(nsBytes.([]byte)).(NameState)
ns.checkAdmin()
}

if !isValid(owner) {
Expand Down
2 changes: 1 addition & 1 deletion tests/container_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ func TestContainerPut(t *testing.T) {
c.id = sha256.Sum256(c.value)

t.Run("bad domain owner", func(t *testing.T) {
tx = PrepareInvoke(t, bc, acc, nnsHash, "register",
tx = PrepareInvoke(t, bc, []*wallet.Account{acc, CommitteeAcc}, nnsHash, "register",
"baddomain.neofs", acc.Contract.ScriptHash(),
"[email protected]", int64(0), int64(0), int64(0), int64(0))
AddBlockCheckHalt(t, bc, tx)
Expand Down
11 changes: 9 additions & 2 deletions tests/nns_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,16 +65,23 @@ func TestNNSRegister(t *testing.T) {
bc := NewChain(t)
h := DeployContract(t, bc, nnsPath, nil)

accTop := NewAccount(t, bc)
refresh, retry, expire, ttl := int64(101), int64(102), int64(103), int64(104)
tx := PrepareInvoke(t, bc, CommitteeAcc, h, "register",
"com", CommitteeAcc.Contract.ScriptHash(),
tx := PrepareInvoke(t, bc, []*wallet.Account{CommitteeAcc, accTop}, h, "register",
"com", accTop.Contract.ScriptHash(),
"[email protected]", refresh, retry, expire, ttl)
AddBlockCheckHalt(t, bc, tx)

acc := NewAccount(t, bc)
tx = PrepareInvoke(t, bc, []*wallet.Account{CommitteeAcc, acc}, h, "register",
"testdomain.com", acc.Contract.ScriptHash(),
"[email protected]", refresh, retry, expire, ttl)
AddBlock(t, bc, tx)
CheckFault(t, bc, tx.Hash(), "not witnessed by admin")

tx = PrepareInvoke(t, bc, []*wallet.Account{accTop, acc}, h, "register",
"testdomain.com", acc.Contract.ScriptHash(),
"[email protected]", refresh, retry, expire, ttl)
b := AddBlockCheckHalt(t, bc, tx)

tx = PrepareInvoke(t, bc, acc, h, "getRecords", "testdomain.com", int64(nns.SOA))
Expand Down

0 comments on commit 14fc086

Please sign in to comment.