TuBiCoin是币安链上发行的代币,前期T00ls为了整合TuBiCoin,通过Python开发了简单交易代码,主要实现了查询TuBiCoin数目、交易TuBiCoin等功能。使用几年功能正常,不过目前似乎在交易功能上有问题了,可能币安对币安链有调整?
有心人士帮忙修改下此代码,完善下代码功能,确保可用性。
T00ls目前使用的TuBiCoin操作代码如下:
有心人士帮忙修改下此代码,完善下代码功能,确保可用性。
T00ls目前使用的TuBiCoin操作代码如下:
from gevent import monkey
from gevent.pywsgi import WSGIServer
monkey.patch_all()
from flask import Flask
from flask import request
from web3 import Web3
import json
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
def showmoney(my_address, contract_address):
bsc = "https://bsc-dataseed.binance.org/"
web3 = Web3(Web3.HTTPProvider(bsc))
abi = json.loads('[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"decimals","type":"uint8"},{"name":"totalSupply","type":"uint256"},{"name":"feeReceiver","type":"address"},{"name":"tokenOwnerAddress","type":"address"}],"payable":true,"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]')
contract_address = web3.to_checksum_address(contract_address)
contract = web3.eth.contract(address=contract_address, abi=abi)
my_address = web3.to_checksum_address(my_address)
balanceOf = contract.functions.balanceOf(my_address).call()
if balanceOf is None:
return '{"status": "failed", "error": "timeout"}'
else:
return '{"status": "success", "TuBiCoin": ' + format(balanceOf) + '}'
def transaction(my_address, to_address, contract_address, private_key, send, gas):
bsc = "https://bsc-dataseed.binance.org/"
web3 = Web3(Web3.HTTPProvider(bsc))
#print(web3.isConnected()) #status
abi = json.loads('[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"decimals","type":"uint8"},{"name":"totalSupply","type":"uint256"},{"name":"feeReceiver","type":"address"},{"name":"tokenOwnerAddress","type":"address"}],"payable":true,"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]')
contract_address = web3.to_checksum_address(contract_address)
contract = web3.eth.contract(address=contract_address, abi=abi)
#print(contract.functions.name().call()) #name
#print(contract.functions.symbol().call()) #symbol
totalSupply = contract.functions.totalSupply().call()
#print(totalSupply) #totalSupply
my_address = web3.to_checksum_address(my_address)
balance = web3.eth.get_balance(my_address)
humanReadalbe = web3.fromWei(balance, 'ether')
#print(humanReadalbe) #Mybnb
balanceOf = contract.functions.balanceOf(my_address).call()
#print(balanceOf) #MyTUBI
#amount = web3.toWei(send, 'ether')
amount = int(send)
nonce = web3.eth.getTransactionCount(my_address)
#print(nonce) #nonce
to_address = web3.to_checksum_address(to_address)
token_tx = contract.functions.transfer(to_address, amount).buildTransaction({
'chainId':56, 'gas': 70000,'gasPrice': web3.toWei(gas,'gwei'), 'nonce':nonce
})
sign_txn = web3.eth.account.signTransaction(token_tx, private_key=private_key)
tx_hash = web3.eth.sendRawTransaction(sign_txn.rawTransaction)
if tx_hash is None:
return '{"status": "failed", "error": "timeout"}'
else:
return '{"status": "success", "Transaction": "' + web3.toHex(tx_hash) + '"}'
def gettransaction(transaction_hash,contract_address):
bsc = "https://bsc-dataseed.binance.org/"
web3 = Web3(Web3.HTTPProvider(bsc))
abi = json.loads('[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"decimals","type":"uint8"},{"name":"totalSupply","type":"uint256"},{"name":"feeReceiver","type":"address"},{"name":"tokenOwnerAddress","type":"address"}],"payable":true,"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]')
contract_address = web3.to_checksum_address(contract_address)
contract = web3.eth.contract(address=contract_address, abi=abi)
transaction = web3.eth.get_transaction(transaction_hash)
from_address = transaction['from']
input=contract.decode_function_input(transaction.input)
to_address = format(input[1]['to'])
value = format(input[1]['value'])
if from_address is None or value is None:
return '{"status": "failed", "error": "timeout"}'
else:
return '{"status": "success", "from_address": "' + from_address + '", "to_address": "' + to_address + '", "value": "' + value + '"}'
@app.route('/showTuBiCoin', methods=['POST'])
def showTuBiCoin():
contract_address='0x713ac71a6ad1021416f12c4a9e17bdf489de6d7e'
if request.method == 'POST':
if request.form['address'] is not None:
return showmoney(request.form['address'],contract_address)
else:
return "{'status': 'failed', 'error': 'erroraddress'}"
@app.route('/getTxnDetail', methods=['POST'])
def getTxnDetail():
contract_address='0x713ac71a6ad1021416f12c4a9e17bdf489de6d7e'
if request.method == 'POST':
if request.form['transaction_hash'] is not None:
return gettransaction(request.form['transaction_hash'],contract_address)
else:
return "{'status': 'failed', 'error': 'erroraddress'}"
@app.route('/transactionTuBiCoin', methods=['POST'])
def transactionTuBiCoin():
contract_address='0x713ac71a6ad1021416f12c4a9e17bdf489de6d7e'
my_address='0x729968a431aC46D8455971DdB86c356a480B9AE6'
private_key='Idontknow'
gas=5
if request.method == 'POST':
send=request.form['tubi']
to_address=request.form['address']
if to_address == contract_address:
return "{'status': 'failed', 'error': 'erroraddress'}"
if (send is not None) and (to_address is not None):
return transaction(my_address, to_address, contract_address, private_key, send, gas)
else:
return "{'status': 'failed', 'error': 'erroraddress'}"
http_server = WSGIServer(('0.0.0.0', int(5000)), app)
http_server.serve_forever()





