diff --git a/programs/native/solua/multisig.lua b/programs/native/solua/multisig.lua index dcfe5acb23..132f36fc22 100644 --- a/programs/native/solua/multisig.lua +++ b/programs/native/solua/multisig.lua @@ -4,8 +4,6 @@ -- are subtracted from account 1 and given to account 4. Note that unlike -- Rust, Lua is one-based and that account 1 is the first account. -local serialize = load(accounts[2].userdata)().serialize - function find(t, x) for i, v in pairs(t) do if v == x then @@ -14,14 +12,25 @@ function find(t, x) end end -if #accounts[3].userdata == 0 then - local cfg = load("return" .. data)() - accounts[3].userdata = serialize(cfg, nil, "s") +function deserialize(bytes) + return load("return" .. bytes)() +end + +local from_account, + serialize_account, + state_account, + to_account = table.unpack(accounts) + +local serialize = load(serialize_account.userdata)().serialize + +if #state_account.userdata == 0 then + local cfg = deserialize(data) + state_account.userdata = serialize(cfg, nil, "s") return end -local cfg = load("return" .. accounts[3].userdata)() -local key = load("return" .. data)() +local cfg = deserialize(state_account.userdata) +local key = deserialize(data) local i = find(cfg.n, key) if i == nil then @@ -30,13 +39,12 @@ end table.remove(cfg.n, i) cfg.m = cfg.m - 1 -accounts[3].userdata = serialize(cfg, nil, "s") +state_account.userdata = serialize(cfg, nil, "s") if cfg.m == 0 then - accounts[1].tokens = accounts[1].tokens - cfg.tokens - accounts[4].tokens = accounts[4].tokens + cfg.tokens + from_account.tokens = from_account.tokens - cfg.tokens + to_account.tokens = to_account.tokens + cfg.tokens -- End of game. - accounts[1].tokens = 0 - accounts[2].tokens = 0 + state_account.tokens = 0 end