# general from hashlib import sha256 from json import dumps, loads # petlib from chainspacecontract.examples.utils import setup as pet_setup from petlib.ecdsa import do_ecdsa_sign, do_ecdsa_verify from petlib.bn import Bn # coconut from chainspacecontract.examples.coconut_util import pet_pack, pet_unpack, pack, unpackG1, unpackG2 from chainspacecontract.examples.coconut_lib import setup as bp_setup, verify from chainspacecontract.examples.coconut_lib import show_coconut_petition, coconut_petition_verify # chainspace from chainspacecontract import ChainspaceContract ## contract name contract = ChainspaceContract('tumbler') #################################################################### # methods #################################################################### # ------------------------------------------------------------------ # init # ------------------------------------------------------------------ @contract.method('init') def init(): return { 'outputs': (dumps({'type' : 'TToken'}),), } # ------------------------------------------------------------------
# general from hashlib import sha256 from json import dumps, loads import os import time, ast import traceback import requests # chainspace from chainspacecontract import ChainspaceContract from chainspaceapi import ChainspaceClient # crypto from petlib.ecdsa import do_ecdsa_sign, do_ecdsa_verify from chainspacecontract.examples.utils import setup, key_gen, pack, unpack ## contract name contract = ChainspaceContract('centra') ## Class definitions for clients DELTA = 5 class CentraClient: def __init__(self, host='127.0.0.1', port=5000, init_token=None): (self.priv, self.pub) = key_gen(setup()) self.cs_client = ChainspaceClient(host=host, port=port) if init_token: self.create_centra_client(init_token) def create_centra_client(self, token): if type(token) is not tuple: token = (token, )
"""A smart contract that implements a simple, authenticated bank.""" #################################################################### # imports #################################################################### # general from hashlib import sha256 from json import dumps, loads # chainspace from chainspacecontract import ChainspaceContract # crypto from petlib.ecdsa import do_ecdsa_sign, do_ecdsa_verify from chainspacecontract.examples.utils import setup, key_gen, pack, unpack ## contract name contract = ChainspaceContract('bank_authenticated') #################################################################### # methods #################################################################### # ------------------------------------------------------------------ # init # ------------------------------------------------------------------ @contract.method('init') def init(): # return return { 'outputs': (dumps({'type' : 'BankToken'}),), }
# imports #################################################################### # general from json import dumps, loads from hashlib import sha256 # cypto from petlib.bn import Bn # chainspace from chainspacecontract import ChainspaceContract # coconut from chainspacecontract.examples.coconut_util import pet_pack, pet_unpack, pack, unpackG1, unpackG2 from chainspacecontract.examples.coconut_lib import setup, mix_verify, prepare_mix_sign, verify_mix_sign, mix_sign from chainspacecontract.examples.coconut_lib import show_mix_sign ## contract name contract = ChainspaceContract('coconut') ## dependencies from chainspacecontract.examples.hello import contract as hello_contract contract.register_dependency(hello_contract) import time #################################################################### # methods #################################################################### # ------------------------------------------------------------------ # init # ------------------------------------------------------------------
#################################################################### # imports #################################################################### # general from hashlib import sha256 from json import dumps, loads, dump from os.path import join import subprocess # chainspace from chainspacecontract import ChainspaceContract ## contract name contract = ChainspaceContract('zenroom_petition') ZENROOM_PATH = "zenroom" SCRIPT_PATH = "/opt/contracts/" DATA_PATH = "/tmp/data.json" def execute_zenroom(script_filename, data_filename=None, key_filename=None): commands = [ZENROOM_PATH] if data_filename: commands = commands + ['-a', data_filename] if key_filename: commands = commands + ['-k', key_filename] commands.append(join(SCRIPT_PATH, script_filename))
from json import dumps, loads # petlib from petlib.ecdsa import do_ecdsa_sign, do_ecdsa_verify # coconut from chainspacecontract.examples.utils import * from contracts.utils import * from contracts.petition_proofs import * from coconut.utils import * from coconut.scheme import * # chainspace from chainspacecontract import ChainspaceContract ## contract name contract = ChainspaceContract('petition') #################################################################### # methods #################################################################### # ------------------------------------------------------------------ # init # ------------------------------------------------------------------ @contract.method('init') def init(): return { 'outputs': (dumps({'type' : 'PToken'}),), } # ------------------------------------------------------------------
""" Hello world contract. """ #################################################################### # imports #################################################################### from json import dumps, loads from chainspacecontract import ChainspaceContract contract = ChainspaceContract('hello') #################################################################### # methods #################################################################### @contract.method('init') def init(): return {'outputs': (dumps({'type': 'HelloToken'}), )} @contract.method('hello') def hello(inputs, reference_inputs, parameters): # Checks that the first input is a token. if not (loads(inputs[0]) == {'type': 'HelloToken'}): raise Exception("Expected a contract token as a first input.") # Create a new "HelloMessage" object, just containing a message.
"""A smart contract that extends smart meter to perform energy bids.""" #################################################################### # imports #################################################################### # general from hashlib import sha256 from json import dumps, loads # chainspace from chainspacecontract import ChainspaceContract # crypto from petlib.ecdsa import do_ecdsa_sign, do_ecdsa_verify from chainspacecontract.examples.utils import setup, key_gen, pack, unpack ## contract name contract = ChainspaceContract('energy_bidding') #################################################################### # methods #################################################################### # ------------------------------------------------------------------ # init # ------------------------------------------------------------------ @contract.method('init') def init(): # return return { 'outputs': (dumps({'type' : 'SMToken'}),), }
"""An example smart contract to demonstrate cross-contract calls.""" from chainspacecontract import ChainspaceContract from chainspacecontract.examples.addition import contract as increment_contract contract = ChainspaceContract('increment_twice') contract.register_dependency(increment_contract) @contract.method('init') def init(): return {'outputs': ('0', )} @contract.method('increment') def increment(inputs, reference_inputs, parameters): integer = int(inputs[0]) increment_contract.increment((parameters[0], ), None, None) return {'outputs': (str(integer + 1), )} if __name__ == '__main__': contract.run()
The main problems are: 1) People can sign the petition multiple time; 2) No ways to determine who is authorised to sign (access control); 3) No privacy. """ #################################################################### # imports #################################################################### # general from json import dumps, loads # chainspace from chainspacecontract import ChainspaceContract ## contract name contract = ChainspaceContract('petition_simple') #################################################################### # methods #################################################################### # ------------------------------------------------------------------ # init # ------------------------------------------------------------------ @contract.method('init') def init(): return { 'outputs': (dumps({'type': 'SPToken'}), ), }
#################################################################### # general from hashlib import sha256 from json import dumps, loads # chainspace from chainspacecontract import ChainspaceContract # crypto from petlib.bn import Bn from petlib.ec import EcGroup from petlib.ecdsa import do_ecdsa_sign, do_ecdsa_verify from chainspacecontract.examples.utils import setup, key_gen, pack, unpack, add, add_side from chainspacecontract.examples.utils import binencrypt, make_table, dec from chainspacecontract.examples.utils import provezero, verifyzero, provebin, verifybin, proveone, verifyone ## contract name contract = ChainspaceContract('vote') #################################################################### # methods #################################################################### # ------------------------------------------------------------------ # init # ------------------------------------------------------------------ @contract.method('init') def init(): # return return {'outputs': (dumps({'type': 'VoteToken'}), )} # ------------------------------------------------------------------
"""Simulation contract for generating and consuming objects.""" from chainspacecontract import ChainspaceContract contract = ChainspaceContract('simulator') @contract.method('init') def init(): return {'outputs': ('o', )} @contract.method('create') def create(inputs, reference_inputs, parameters): count = int(parameters[0]) return {'outputs': ('o', ) * count} @contract.method('consume') def consume(inputs, reference_inputs, parameters): return {} if __name__ == '__main__': contract.run()
"""A smart contract that implements a simple, authenticated bank.""" #################################################################### # imports #################################################################### # general from hashlib import sha256 from json import dumps, loads # chainspace from chainspacecontract import ChainspaceContract ## contract name contract = ChainspaceContract('sensor') #################################################################### # methods #################################################################### # ------------------------------------------------------------------ # init # ------------------------------------------------------------------ @contract.method('init') def init(): # return return { 'outputs': (dumps({'type' : 'SensorToken'}),), } # ------------------------------------------------------------------
"""A smart contract that implements a smart meter.""" #################################################################### # imports #################################################################### # general from hashlib import sha256 from json import dumps, loads # chainspace from chainspacecontract import ChainspaceContract # crypto from petlib.ecdsa import do_ecdsa_sign, do_ecdsa_verify from chainspacecontract.examples.utils import setup, key_gen, pack, unpack ## contract name contract = ChainspaceContract('smart_meter') #################################################################### # methods #################################################################### # ------------------------------------------------------------------ # init # ------------------------------------------------------------------ @contract.method('init') def init(): # return return { 'outputs': (dumps({'type': 'SMToken'}), ), }
""" Dump contract with a checker returning always True. """ from chainspacecontract import ChainspaceContract contract = ChainspaceContract('dump') @contract.method('init') def init(): return {'outputs': ('dump', )} @contract.method('do_nothing') def increment(inputs, reference_inputs, parameters): return {'outputs': ('dump', )} @contract.checker('do_nothing') def increment_checker(inputs, reference_inputs, parameters, outputs, returns, dependencies): return True if __name__ == '__main__': contract.run()
"""A simple smart contract which keeps track of an integer that can be incremented.""" from chainspacecontract import ChainspaceContract contract = ChainspaceContract('addition') @contract.method('init') def init(): return {'outputs': ('0', )} @contract.method('increment') def increment(inputs, reference_inputs, parameters): integer = int(inputs[0]) return {'outputs': (str(integer + 1), )} if __name__ == '__main__': contract.run()
#################################################################### # general from hashlib import sha256 from json import dumps, loads # chainspace from chainspacecontract import ChainspaceContract # crypto from petlib.bn import Bn from petlib.ec import EcGroup from petlib.ecdsa import do_ecdsa_sign, do_ecdsa_verify from chainspacecontract.examples.utils import setup, key_gen, pack, unpack, add, add_side from chainspacecontract.examples.utils import binencrypt, make_table, dec from chainspacecontract.examples.utils import provezero, verifyzero, provebin, verifybin, proveone, verifyone ## contract name contract = ChainspaceContract('petition_encrypted') #################################################################### # methods #################################################################### # ------------------------------------------------------------------ # init # ------------------------------------------------------------------ @contract.method('init') def init(): # return return {'outputs': (dumps({'type': 'PetitionEncToken'}), )} # ------------------------------------------------------------------