def build_payment_tx(self, options): tx = Transaction(self, None) if not options: tx.tx_json['obj'] = Exception('invalid options type') return tx if options.__contains__('source'): src = options['source'] elif options.__contains__('from'): src = options['from'] elif options.__contains__('account'): src = options['account'] if options.__contains__('destination'): dst = options['destination'] elif options.__contains__('to'): dst = options['to'] amount = options['amount'] if not Wallet.is_valid_address(src): tx.tx_json['src'] = Exception('invalid source address') return tx if not Wallet.is_valid_address(dst): tx.tx_json['dst'] = Exception('invalid destination address') return tx if not utils.is_valid_amount(amount): tx.tx_json['amount'] = Exception('invalid amount') return tx tx.tx_json['TransactionType'] = 'Payment' tx.tx_json['Account'] = src tx.tx_json['Amount'] = to_amount(amount) tx.tx_json['Destination'] = dst return tx
def build_relation_tx(self, options): tx = Transaction(self, None) if not options: tx.tx_json['obj'] = Exception('invalid options type') return tx if not options['type'] in RelationTypes: tx.tx_json['type'] = Exception('invalid relation type') return tx if options['type'] == 'trust': return self.__build_trust_set(options, tx) elif options['type'] == 'authorize' or \ options['type'] == 'freeze' or options['type'] == 'unfreeze': return self.__build_relation_set(options, tx) tx.tx_json['msg'] = Exception('build relation set should not go here') return tx
def build_account_set_tx(self, options): tx = Transaction(self, None) if not options: tx.tx_json['obj'] = ValueError('invalid options type') return tx if not options['type'] in AccountSetTypes: tx.tx_json['type'] = ValueError('invalid account set type') return tx if options['type'] == 'property': return self.__build_account_set(options, tx) elif options['type'] == 'delegate': return self.__build_delegate_key_set(options, tx) elif options['type'] == 'signer': return self.__build_signer_set() # not implement yet tx.tx_json['msg'] = Warning('build account set should not go here') return tx
def build_offer_cancel_tx(self, options): tx = Transaction(self, None) if not options: tx.tx_json.obj = Exception('invalid options type') return tx if options.__contains__('source'): src = options['source'] elif options.__contains__('from'): src = options['from'] elif options.__contains__('account'): src = options['account'] sequence = options['sequence'] if not Wallet.is_valid_address(src): tx.tx_json['src'] = Exception('invalid source address') return tx if not int(sequence) and not float(sequence): tx.tx_json['sequence'] = Exception('invalid sequence param') return tx tx.tx_json['TransactionType'] = 'OfferCancel' tx.tx_json['Account'] = src tx.tx_json['OfferSequence'] = int(sequence) return tx
def build_offer_create_tx(self, options): tx = Transaction(self, None) if not options: tx.tx_json['obj'] = TypeError('invalid options type') return tx offer_type = options['type'] if options.__contains__('source'): src = options['source'] elif options.__contains__('from'): src = options['from'] elif options.__contains__('account'): src = options['account'] if options.__contains__('taker_gets'): taker_gets = options['taker_gets'] elif options.__contains__('pays'): taker_gets = options['pays'] if options.__contains__('taker_pays'): taker_pays = options['taker_pays'] elif options.__contains__('gets'): taker_pays = options['gets'] if not Wallet.is_valid_address(src): tx.tx_json['src'] = Exception('invalid source address') return tx if not isinstance(offer_type, str) or not offer_type in OfferTypes: tx.tx_json['offer_type'] = TypeError('invalid offer type') return tx if isinstance(taker_gets, str) and not int(taker_gets) and not float(taker_gets): tx.tx_json['taker_gets2'] = Exception('invalid to pays amount') return tx if not taker_gets and not utils.is_valid_amount(taker_gets): tx.tx_json['taker_gets2'] = Exception( 'invalid to pays amount object') return tx if isinstance( taker_pays, str) and not int(taker_pays) and not not float(taker_pays): tx.tx_json['taker_pays2'] = Exception('invalid to gets amount') return tx if not taker_pays and not utils.is_valid_amount(taker_pays): tx.tx_json['taker_pays2'] = Exception( 'invalid to gets amount object') return tx tx.tx_json['TransactionType'] = 'OfferCreate' if offer_type is 'Sell': tx.set_flags(offer_type) tx.tx_json['Account'] = src tx.tx_json['TakerPays'] = to_amount(taker_pays) tx.tx_json['TakerGets'] = to_amount(taker_gets) return tx
def call_contract_tx(self, options): """ 创建执行合约对象 * @param options * account, required * destination, required * foo, required * @returns {Transaction} """ tx = Transaction(self, None) if not options: tx.tx_json['obj'] = Exception('invalid options type') return tx account = options['account'] des = options['destination'] foo = options['foo'] if options.__contains__('params'): params = options['params'] if not Wallet.is_valid_address(account): tx.tx_json['account'] = Exception('invalid account') return tx if not Wallet.is_valid_address(des): tx.tx_json['des'] = Exception('invalid destination') return tx if not isinstance(foo, str): tx.tx_json['foo'] = Exception('foo must be string') return tx if 'params' in vars(): if not isinstance(params, list): tx.tx_json['params'] = Exception('invalid params') return tx tx.tx_json['TransactionType'] = 'ConfigContract' tx.tx_json['Account'] = account tx.tx_json['Method'] = 1 tx.tx_json['Destination'] = des tx.tx_json['ContractMethod'] = str_to_hex(foo) tx.tx_json['Args'] = [] for i in params: if not isinstance(i, str): tx.tx_json['params'] = Exception('params must be string') return tx obj = dict() obj['Arg'] = {'Parameter': str_to_hex(i)} tx.tx_json['Args'].append(obj) return tx
def deploy_contract_tx(self, options): """ 创建部署合约对象 * @param options * account, required * amount, required * payload, required * @returns {Transaction} """ tx = Transaction(self, None) if not options: tx.tx_json['obj'] = Exception('invalid options type') return tx account = options['account'] amount = options['amount'] payload = options['payload'] if options.__contains__('params'): params = options['params'] if not Wallet.is_valid_address(account): tx.tx_json['account'] = Exception('invalid account') return tx if math.isnan(amount): tx.tx_json['amount'] = Exception('invalid amount') return tx if not isinstance(payload, str): tx.tx_json['payload'] = Exception('invalid payload: type error.') return tx if 'params' in vars(): if not isinstance(params, list): tx.tx_json['params'] = Exception('invalid params') return tx tx.tx_json['TransactionType'] = 'ConfigContract' tx.tx_json['Account'] = account tx.tx_json['Amount'] = amount * 1000000 tx.tx_json['Method'] = 0 tx.tx_json['Payload'] = payload tx.tx_json['Args'] = [] if 'params' in vars(): for i in params: obj = dict() obj['Arg'] = {'Parameter': str_to_hex(i)} tx.tx_json['Args'].append(obj) # print(tx.tx_json['Args']) return tx