def _from_json_data_object(self, data): self._coin_inputs = [CoinInput.from_json( ci) for ci in data.get('coininputs', []) or []] self._coin_outputs = [CoinOutput.from_json( co) for co in data.get('coinoutputs', []) or []] self._blockstake_inputs = [BlockstakeInput.from_json( bsi) for bsi in data.get('blockstakeinputs', []) or []] self._blockstake_outputs = [BlockstakeOutput.from_json( bso) for bso in data.get('blockstakeoutputs', []) or []] self._miner_fees = [Currency.from_json( fee) for fee in data.get('minerfees', []) or []] self._data = BinaryData.from_json( data.get('arbitrarydata', None) or '', strencoding='base64')
def legacy_from_json(cls, obj): """ Class method to decode v1 Tx from a legacy v0 Tx. """ tv = obj.get('version', -1) if TransactionVersion.LEGACY != tv: raise ValueError("legacy v0 transaction is expected to be of version {}, not version {}".format( TransactionVersion.LEGACY, tv)) txn = cls() if 'data' not in obj: raise ValueError("no data object found in Legacy Transaction (v{})".format( TransactionVersion.LEGACY)) txn_data = obj['data'] if 'coininputs' in txn_data: for legacy_ci_info in (txn_data['coininputs'] or []): unlocker = legacy_ci_info.get('unlocker', {}) ci_info = { 'parentid': legacy_ci_info.get('parentid', ''), 'fulfillment': { 'type': 1, 'data': { 'publickey': unlocker.get('condition', {}).get('publickey'), 'signature': unlocker.get('fulfillment', {}).get('signature'), } } } ci = CoinInput.from_json(ci_info) txn._coin_inputs.append(ci) if 'coinoutputs' in txn_data: for legacy_co_info in (txn_data['coinoutputs'] or []): co_info = { 'value': legacy_co_info.get('value', '0'), 'condition': { 'type': 1, 'data': { 'unlockhash': legacy_co_info.get('unlockhash', ''), } } } co = CoinOutput.from_json(co_info) txn._coin_outputs.append(co) if 'blockstakeinputs' in txn_data: for legacy_bsi_info in (txn_data['blockstakeinputs'] or []): unlocker = legacy_bsi_info.get('unlocker', {}) bsi_info = { 'parentid': legacy_bsi_info.get('parentid', ''), 'fulfillment': { 'type': 1, 'data': { 'publickey': unlocker.get('condition', {}).get('publickey'), 'signature': unlocker.get('fulfillment', {}).get('signature'), } } } bsi = BlockstakeInput.from_json(bsi_info) txn._blockstake_inputs.append(bsi) if 'blockstakeoutputs' in txn_data: for legacy_bso_info in (txn_data['blockstakeoutputs'] or []): bso_info = { 'value': legacy_bso_info.get('value', '0'), 'condition': { 'type': 1, 'data': { 'unlockhash': legacy_bso_info.get('unlockhash', ''), } } } bso = BlockstakeOutput.from_json(bso_info) txn._blockstake_outputs.append(bso) if 'minerfees' in txn_data: for miner_fee in (txn_data['minerfees'] or []): txn._miner_fees.append(Currency.from_json(miner_fee)) if 'arbitrarydata' in txn_data: txn._data = BinaryData.from_json(txn_data.get( 'arbitrarydata', None) or '', strencoding='base64') txn._legacy = True return txn
def blockstake_input_add(self, parentid, fulfillment, parent_output=None): bsi = BlockstakeInput(parentid=parentid, fulfillment=fulfillment) bsi.parent_output = parent_output self._blockstake_inputs.append(bsi)