電子署名 秘密鍵 ScalarDL Ledger リクエスト : (contract, args, sig) Asset ID Age Data (before) Data (after) Sigs Func (ref) Args Hash A 1 { } { balance = 100, …} charge { val = 100 } B 1 { } { balance = 200, …} charge { val = 200 } A 2 { A: {balance = 100}, B: {balance = 200} …} { balance = 90, …} payment { val = 10 } 公開鍵 B 2 { A: {balance = 100}, B: {balance = 200} …} { balance = 210, …} payment { val = 10 } H(A1) H(B1) State hash chain * includes other accounts data 引数 S N = Contract (S N-1 , Args) Deterministic & TE TE If S 0 is TE ⇒ S N is TE Ledger データの完全性 function invoke() { if (accounts[0].data.balance < args.val) { throw new Error(“not enough balance”); } accounts[0].data.balance -= args.val; accounts[1].data.balance += args.val; results = { … }; } Payment コントラクト 引数 { accounts = [“A”, “B”], val = 10, …}