トランザクションの手数料はinputsからoutputsを引いたもの
マイナーへの報酬となるトランザクション手数料のため、inputsはoutputsの合計以上の額にならなければならない。
class TxFetcher: cache = {} @classmethod def get_url(cls, testnet=False): if testnet: return '' else: return '' @classmethod def fetch(cls, tx_id, testnet=False, fresh=False): if fresh or (tx_id not in cls.cache): url = '{}/tx/{}.hex'.format(cls.get_url(testnet), tx_id) response = requests.get(url) try: raw = bytes.fromhex(response.text.strip()) except ValueError: raise ValueError('unexpected response: {}'.format(response.text)) if raw[4] == 0: raw = raw[:4] + raw[6:] tx = Tx.parse(BytesIO(raw), testnet=testnet) tx.locktime = little_endian_to_int(raw[-4:]) else: tx = Tx.parse(BytesIO(raw), testnet=testnet) if tx.id() != tx_id: raise ValueError('not the same id: {} vs {}'.format(tx.id(), tx_id)) cls.cache[tx_id] = tx cls.cache[tx_id].testnet = testnet return cls.cache[tx_id]
def fetch_tx(self, testnet=False): return TxFetcher.fetch(self.prev_tx.hex(), testnet=testnet) def value(self, testnet=False): tx = self.fetch_tx(testnet=testnet) return tx.tx_outs[self.prev_index].amount def script_pubkey(self, testnet=False): tx = self.fetch_tx(testnet=test) return tx.tx_outs[self.prev_index].script_pubkey
transaction idで特定し、前のトランザクションindexから対象outputのamout, script_pubkeyを取得している
def fee(self, testnet=False): input_sum, output_sum = 0, 0 for tx_in in self.tx_ins: input_sum += tx_in.value(testnet=testnet) for tx_out in self.tx_outs: output_sum += tx_out.amount return input_sum - output_sum