mirror of
https://github.com/planetmint/planetmint.git
synced 2025-08-02 08:43:14 +00:00

* restructering, added helper, split cli tests for later Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed threshold test Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added acceptance tests to integration test suite Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added different threshold signature test scenarios Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * started chain-migration test implementation Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed linter errors Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * removed -s from test command Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
85 lines
2.7 KiB
Python
85 lines
2.7 KiB
Python
# GOAL:
|
|
# In this script I tried to implement the ECDSA signature using zenroom
|
|
|
|
# However, the scripts are customizable and so with the same procedure
|
|
# we can implement more complex smart contracts
|
|
|
|
# PUBLIC IDENTITY
|
|
# The public identity of the users in this script (Bob and Alice)
|
|
# is the pair (ECDH public key, Testnet address)
|
|
|
|
import json
|
|
|
|
from cryptoconditions import ZenroomSha256
|
|
from json.decoder import JSONDecodeError
|
|
|
|
|
|
def test_zenroom(gen_key_zencode, secret_key_to_private_key_zencode, fulfill_script_zencode,
|
|
condition_script_zencode, zenroom_data, zenroom_house_assets):
|
|
alice = json.loads(ZenroomSha256.run_zenroom(gen_key_zencode).output)['keys']
|
|
bob = json.loads(ZenroomSha256.run_zenroom(gen_key_zencode).output)['keys']
|
|
|
|
zen_public_keys = json.loads(ZenroomSha256.run_zenroom(secret_key_to_private_key_zencode.format('Alice'),
|
|
keys={'keys': alice}).output)
|
|
zen_public_keys.update(json.loads(ZenroomSha256.run_zenroom(secret_key_to_private_key_zencode.format('Bob'),
|
|
keys={'keys': bob}).output))
|
|
|
|
# CRYPTO-CONDITIONS: instantiate an Ed25519 crypto-condition for buyer
|
|
zenSha = ZenroomSha256(script=fulfill_script_zencode, keys=zen_public_keys, data=zenroom_data)
|
|
|
|
# CRYPTO-CONDITIONS: generate the condition uri
|
|
condition_uri = zenSha.condition.serialize_uri()
|
|
|
|
# CRYPTO-CONDITIONS: construct an unsigned fulfillment dictionary
|
|
unsigned_fulfillment_dict = {
|
|
'type': zenSha.TYPE_NAME,
|
|
'script': fulfill_script_zencode,
|
|
'keys': zen_public_keys,
|
|
}
|
|
|
|
output = {
|
|
'amount': '1000',
|
|
'condition': {
|
|
'details': unsigned_fulfillment_dict,
|
|
'uri': condition_uri,
|
|
},
|
|
'data': zenroom_data,
|
|
'script': fulfill_script_zencode,
|
|
'conf': '',
|
|
'public_keys': (zen_public_keys['Alice']['ecdh_public_key'], ),
|
|
}
|
|
|
|
input_ = {
|
|
'fulfillment': None,
|
|
'fulfills': None,
|
|
'owners_before': (zen_public_keys['Alice']['ecdh_public_key'], ),
|
|
}
|
|
|
|
token_creation_tx = {
|
|
'operation': 'CREATE',
|
|
'asset': zenroom_house_assets,
|
|
'metadata': None,
|
|
'outputs': (output,),
|
|
'inputs': (input_,),
|
|
'version': '2.0',
|
|
'id': None,
|
|
}
|
|
|
|
# JSON: serialize the transaction-without-id to a json formatted string
|
|
message = json.dumps(
|
|
token_creation_tx,
|
|
sort_keys=True,
|
|
separators=(',', ':'),
|
|
ensure_ascii=False,
|
|
)
|
|
|
|
try:
|
|
assert(not zenSha.validate(message=message))
|
|
except JSONDecodeError:
|
|
pass
|
|
except ValueError:
|
|
pass
|
|
|
|
message = zenSha.sign(message, condition_script_zencode, alice)
|
|
assert(zenSha.validate(message=message))
|