container: register NNS root on update

Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
Evgenii Stratonikov 2021-10-07 14:00:46 +03:00 committed by Alex Vanin
parent 80d599b65b
commit 18ff4ea116

View file

@ -71,10 +71,6 @@ func OnNEP11Payment(a interop.Hash160, b int, c []byte, d interface{}) {
func _deploy(data interface{}, isUpdate bool) { func _deploy(data interface{}, isUpdate bool) {
ctx := storage.GetContext() ctx := storage.GetContext()
if isUpdate {
return
}
args := data.([]interface{}) args := data.([]interface{})
notaryDisabled := args[0].(bool) notaryDisabled := args[0].(bool)
addrNetmap := args[1].(interop.Hash160) addrNetmap := args[1].(interop.Hash160)
@ -83,6 +79,11 @@ func _deploy(data interface{}, isUpdate bool) {
addrNNS := args[4].(interop.Hash160) addrNNS := args[4].(interop.Hash160)
nnsRoot := args[5].(string) nnsRoot := args[5].(string)
if isUpdate {
registerNiceNameTLD(addrNNS, nnsRoot)
return
}
if len(addrNetmap) != 20 || len(addrBalance) != 20 || len(addrID) != 20 { if len(addrNetmap) != 20 || len(addrBalance) != 20 || len(addrID) != 20 {
panic("incorrect length of contract script hash") panic("incorrect length of contract script hash")
} }
@ -101,11 +102,22 @@ func _deploy(data interface{}, isUpdate bool) {
} }
// add NNS root for container alias domains // add NNS root for container alias domains
contract.Call(addrNNS, "addRoot", contract.All, nnsRoot) registerNiceNameTLD(addrNNS, nnsRoot)
runtime.Log("container contract initialized") runtime.Log("container contract initialized")
} }
func registerNiceNameTLD(addrNNS interop.Hash160, nnsRoot string) {
iter := contract.Call(addrNNS, "roots", contract.ReadStates).(iterator.Iterator)
for iterator.Next(iter) {
if iterator.Value(iter).(string) == nnsRoot {
runtime.Log("NNS root is already registered: " + nnsRoot)
return
}
}
contract.Call(addrNNS, "addRoot", contract.All, nnsRoot)
}
// Update method updates contract source code and manifest. Can be invoked // Update method updates contract source code and manifest. Can be invoked
// only by committee. // only by committee.
func Update(script []byte, manifest []byte, data interface{}) { func Update(script []byte, manifest []byte, data interface{}) {