narodnik 4 лет назад
Родитель
Сommit
30263c0946
2 измененных файлов с 27 добавлено и 20 удалено
  1. 15 8
      bin/daod/demo/main.py
  2. 12 12
      bin/daod/demo/tx.py

+ 15 - 8
bin/daod/demo/main.py

@@ -186,9 +186,11 @@ def main(argv):
 
     builder = TransactionBuilder(ec)
     builder.add_clear_input(initial_supply, token_id, signature_secret)
-    depends = [b"0xdao_ruleset"]
-    user_data = []
-    builder.add_output(initial_supply, token_id, public, depends, user_data)
+    spend_hook = b"0xdao_ruleset"
+    # This can be a simple hash of the items passed into the ZK proof
+    # up to corresponding linked ZK proof to interpret however they need.
+    user_data = b""
+    builder.add_output(initial_supply, token_id, public, spend_hook, user_data)
     tx = builder.build()
 
     state = State()
@@ -196,10 +198,10 @@ def main(argv):
         return -1
     state.apply(update)
 
-    # Now the depends field specifies the function DaoExec
+    # Now the spend_hook field specifies the function DaoExec
     # so the tx above must also be combined with a DaoExec tx
     for input in tx.inputs:
-        assert input.revealed.depends == [b"0xdao_ruleset"]
+        assert input.revealed.spend_hook == [b"0xdao_ruleset"]
     builder = DaoExecBuilder()
     dao_tx = builder.build()
     if (update := dao_exec_state_transition(dao_state, dao_tx)) is None:
@@ -239,7 +241,7 @@ def main(argv):
         note.token_id,
         note.serial,
         note.coin_blind,
-        depends,
+        spend_hook,
         user_data
     )
     assert coin == tx.outputs[0].mint_proof.get_revealed().coin
@@ -251,9 +253,10 @@ def main(argv):
     secret2 = ec.random_scalar()
     public2 = ec.multiply(secret, ec.G)
 
-    builder.add_output(1000, token_id, public2, depends=[b"0x0000"], user_data=[])
+    builder.add_output(1000, token_id, public2, spend_hook=[b"0x0000"],
+                       user_data=[])
     # Change
-    builder.add_output(note.value - 1000, token_id, public, depends, user_data)
+    builder.add_output(note.value - 1000, token_id, public, spend_hook, user_data)
 
     tx = builder.build()
 
@@ -261,6 +264,10 @@ def main(argv):
         return -1
     state.apply(update)
 
+    # At least one input has this field value which means the 0xdao_ruleset
+    # is invoked.
+    assert tx.inputs[0].revealed.spend_hook == b"0xdao_ruleset"
+
     return 0
 
 if __name__ == "__main__":

+ 12 - 12
bin/daod/demo/tx.py

@@ -24,12 +24,12 @@ class TransactionBuilder:
         input.note = note
         self.inputs.append(input)
 
-    def add_output(self, value, token_id, public, depends, user_data):
+    def add_output(self, value, token_id, public, spend_hook, user_data):
         output = ClassNamespace()
         output.value = value
         output.token_id = token_id
         output.public = public
-        output.depends = depends
+        output.spend_hook = spend_hook
         output.user_data = user_data
         self.outputs.append(output)
 
@@ -70,7 +70,7 @@ class TransactionBuilder:
             tx_input.burn_proof = BurnProof(
                 input.note.value, input.note.token_id, input.note.value_blind,
                 token_blind, input.note.serial, input.note.coin_blind,
-                input.secret, input.note.depends, input.note.user_data,
+                input.secret, input.note.spend_hook, input.note.user_data,
                 input.all_coins, signature_secret, self.ec)
             tx_input.revealed = tx_input.burn_proof.get_revealed()
             tx.inputs.append(tx_input)
@@ -92,7 +92,7 @@ class TransactionBuilder:
             note.coin_blind = self.ec.random_base()
             note.value_blind = value_blind
             note.token_blind = token_blind
-            note.depends = output.depends
+            note.spend_hook = output.spend_hook
             note.user_data = output.user_data
 
             tx_output = ClassNamespace()
@@ -101,7 +101,7 @@ class TransactionBuilder:
             tx_output.mint_proof = MintProof(
                 note.value, note.token_id, note.value_blind,
                 note.token_blind, note.serial, note.coin_blind,
-                output.public, output.depends, output.user_data, self.ec)
+                output.public, output.spend_hook, output.user_data, self.ec)
             tx_output.revealed = tx_output.mint_proof.get_revealed()
             assert tx_output.mint_proof.verify(tx_output.revealed)
 
@@ -201,7 +201,7 @@ class Transaction:
 class BurnProof:
 
     def __init__(self, value, token_id, value_blind, token_blind, serial,
-                 coin_blind, secret, depends, user_data, all_coins,
+                 coin_blind, secret, spend_hook, user_data, all_coins,
                  signature_secret, ec):
         self.value = value
         self.token_id = token_id
@@ -210,7 +210,7 @@ class BurnProof:
         self.serial = serial
         self.coin_blind = coin_blind
         self.secret = secret
-        self.depends = depends
+        self.spend_hook = spend_hook
         self.user_data = user_data
         self.all_coins = all_coins
         self.signature_secret = signature_secret
@@ -234,7 +234,7 @@ class BurnProof:
                                                      self.ec.G)
 
         # This is fully public, no merkle tree or anything
-        revealed.depends = self.depends
+        revealed.spend_hook = self.spend_hook
 
         return revealed
 
@@ -250,7 +250,7 @@ class BurnProof:
             self.token_id,
             self.serial,
             self.coin_blind,
-            self.depends,
+            self.spend_hook,
             self.user_data,
         )
         # Merkle root check
@@ -268,7 +268,7 @@ class BurnProof:
 class MintProof:
 
     def __init__(self, value, token_id, value_blind, token_blind, serial,
-                 coin_blind, public, depends, user_data, ec):
+                 coin_blind, public, spend_hook, user_data, ec):
         self.value = value
         self.token_id = token_id
         self.value_blind = value_blind
@@ -276,7 +276,7 @@ class MintProof:
         self.serial = serial
         self.coin_blind = coin_blind
         self.public = public
-        self.depends = depends
+        self.spend_hook = spend_hook
         self.user_data = user_data
 
         self.ec = ec
@@ -291,7 +291,7 @@ class MintProof:
             self.token_id,
             self.serial,
             self.coin_blind,
-            self.depends,
+            self.spend_hook,
             self.user_data
         )