Source code for boa_test.example.demo.ICO_Template

"""
NEP5 Standard
===================================

Author: Thomas Saunders
Email: tom@neonexchange.org

Date: Dec 11 2017

"""
from boa_test.example.demo.token.txio import get_asset_attachments
from boa_test.example.demo.token.crowdsale import get_circulation, perform_exchange, kyc_register, \
    kyc_status, crowdsale_available_amount, add_to_circulation, TOKEN_INITIAL_AMOUNT, TOKEN_OWNER
from boa_test.example.demo.token.nep5 import NEP5_METHODS, handle_nep51
from boa.interop.Neo.Runtime import GetTrigger, CheckWitness
from boa.interop.Neo.TriggerType import Application, Verification
from boa.interop.Neo.Storage import GetContext, Get, Put
from boa.interop.Neo.Action import RegisterAction

ctx = GetContext()

OnTransfer = RegisterAction('transfer', 'addr_from', 'addr_to', 'amount')


[docs]def Main(operation, args): """ :param operation: str The name of the operation to perform :param args: list A list of arguments along with the operation :return: bytearray: The result of the operation """ trigger = GetTrigger() # This is used in the Verification portion of the contract # To determine whether a transfer of system assets ( NEO/Gas) involving # This contract's address can proceed if trigger == Verification(): # check if the invoker is the owner of this contract is_owner = CheckWitness(TOKEN_OWNER) # If owner, proceed if is_owner: return True # Otherwise, we need to lookup the assets and determine # If attachments of assets is ok attachments = get_asset_attachments() return False # return can_exchange(ctx,attachments, True) elif trigger == Application(): for op in NEP5_METHODS: if operation == op: return handle_nep51(ctx, operation, args) if operation == 'deploy': return deploy() elif operation == 'circulation': return get_circulation(ctx) # the following are handled by crowdsale elif operation == 'mintTokens': return perform_exchange(ctx) elif operation == 'crowdsale_register': return kyc_register(ctx, args) elif operation == 'crowdsale_status': return kyc_status(ctx, args) elif operation == 'crowdsale_available': return crowdsale_available_amount(ctx) elif operation == 'get_attachments': return get_asset_attachments() elif operation == 'another_op_1': return 1 + 1 elif operation == 'another_op_2': return 1 + 2 elif operation == 'another_op_3': return 1 + 3 elif operation == 'another_op_4': return 1 + 4 elif operation == 'another_op_5': return 1 + 5 return 'unknown operation' return False
[docs]def deploy(): """ :param token: Token The token to deploy :return: bool: Whether the operation was successful """ if not CheckWitness(TOKEN_OWNER): print("Must be owner to deploy") return False if not Get(ctx, 'initialized'): # do deploy logic Put(ctx, 'initialized', 1) Put(ctx, TOKEN_OWNER, TOKEN_INITIAL_AMOUNT) # dispatch transfer event for minting OnTransfer(None, TOKEN_OWNER, TOKEN_INITIAL_AMOUNT) return add_to_circulation(ctx, TOKEN_INITIAL_AMOUNT) return False