스마트 컨트랙트¶
스마트 컨트랙트 배포/실행/조회를 할 수 있습니다. 배포와 실행은 트랙잭션을 만들기 때문에 계정에 충분한 aergo 토큰이 있어야만 합니다.
배포¶
스마트 컨트랙트 컴파일을 한 후 배포를 할 수 있습니다.
인자 없이¶
생성자 인자 없이 배포할 수 있습니다.
-- no arguments
function constructor()
system.setItem("k1", "v1")
end
...
인자 사용¶
생성자 인자와 함께 배포할 수 있습니다.
-- arguments (key, value)
function constructor(key, value)
system.setItem(key, value)
end
...
Token과 함께¶
배포할 때 aergo token을 전송할 수 있습니다. 이 때 constructor 함수가 payable에 등록되어 있어야 합니다.
function constructor()
system.setItem("k1", "v1")
end
...
-- registered as payable
abi.payable(constructor)
추가 & 삭제¶
실행¶
컨트랙트 실행을 통해 state db의 상태를 바꿀 수 있습니다. 함수 실행을 위해서는 register로 등록되어 있어야 합니다.
인자 없이¶
인자없이 컨트랙트를 실행할 수 있습니다
...
-- no arguments
function setDefault()
system.setItem("k1", "v1")
end
...
-- register as execution
abi.register(setDefault)
인자 사용¶
인자를 가지고 컨트랙트를 실행할 수 있습니다
...
-- arguments (key, value)
function set(key, value)
system.setItem(key, value)
end
...
-- register as execution
abi.register(set)
Token과 함께¶
Aergo 토큰과 함께 컨트랙트를 실행할 수 있습니다. 이를 위해서는 함수가 payable에 등록되어 있어야 합니다.
...
function run()
end
...
-- registered as payable
abi.payable(run)
수수료 전가¶
실행할 때 수수료를 컨트랙트 주소가 부담하게 할 수 있습니다. 이를 위해서는 함수가 fee_delegation로 등록되어 있어야 하며 컨트랙트에 aergo 토큰이 있어야 합니다.
...
function run()
end
-- registered as fee delegation
abi.fee_delegation(run)
-- register as execution
abi.register(run)
조회¶
컨트랙트 조회를 통해 내부 state db의 상태를 조회할 수 있습니다
인자 없이¶
함수 인자 없이 조회할 수 있습니다.
...
-- no arguments
function getDefault()
return system.getItem("k1")
end
-- registered as register_view
abi.register_view(getDefault)
인자 사용¶
함수 인자를 사용하여 조회할 수 있습니다.
...
-- arguments (key)
function get(key)
return system.getItem(key)
end
-- registered as register_view
abi.register_view(get)
가변인자¶
Lua에서는 가변인자를 지원합니다. 가변인자는 ... 로 표현됩니다.
...
-- ... : varargs
function set(key, ...)
local s = ""
for i,v in ipairs{...} do
s = s .. v
end
system.setItem(key, s)
end
...
abi.register(set)
재배포 (private 모드에서만 허용)¶
이미 배포된 컨트랙트에 재배포 할 수 있습니다. 재배포는 private 모드에서만 가능합니다. 재배포를 하는 계정은 이미 배포된 컨트랙트를 배포한 계정이어야 합니다.
컨트랙트 재배포를 위해서는 이미 배포되어 있는 컨트랙트 주소를 선택한 후 deploy 버튼을 클릭하면 됩니다.