通过python的合约发送令牌导致错误:Validate TransferContract错误,没有OwnerAccou



我想通过这个(tron-api-python)库发送一个令牌,但我收到了一个错误当我发送Trx时,没有问题,它被发送了,但是当我想使用智能合约发送所需的令牌时,我得到了一个错误。

from tronapi import Tron
from tronapi import HttpProvider
full_node = HttpProvider('https://nile.trongrid.io')
solidity_node = HttpProvider('https://nile.trongrid.io')
event_server = HttpProvider('https://nile.trongrid.io')
tron = Tron(full_node=full_node,
solidity_node=solidity_node,
event_server=event_server)
trx_kwargs = dict()
trx_kwargs["private_key"] = '59d4b72df50290d7f78e2c16fc27758d6e235f3959f2212f2497fc55da33e888'
trx_kwargs["default_address"] = 'TRNDt7bjFoTq7p52iw5u2BLNhsff1ux7Fc'
trron = Tron(**trx_kwargs)
kwargs = dict()
kwargs["contract_address"] = tron.address.to_hex("TLBaRhANQoJFTqre9Nf1mjuwNWjCJeYqUL") # USDT contract address
kwargs["function_selector"] = "transfer(address,uint256)" # function to call and types. for reference on tronscan it looks like this: transfer(address _to,uint256 _value)
kwargs["fee_limit"] = 5000000 # fee limit in tron (5 TRX here)
kwargs["call_value"] = 0 # I have no idea
Towallet = 'TTG8u8fUKqJwMtB59ppaWqgFVGDb5ojWPU'
Amount = 10.3
# added message
send = trron.trx.send_transaction(trron.address.to_hex(Towallet), Amount)
txid = send["txid"]
print(send)
print(f'your txid is {txid}')

我得到这个错误Validate TransferContract error, no OwnerAccount.

完全错误:

Traceback (most recent call last):
File "main.py", line 26, in <module>
send = trron.trx.send_transaction(trron.address.to_hex(Towallet), Amount)
File "/home/runner/newtrx/venv/lib/python3.8/site-packages/tronapi/trx.py", line 421, in send_transaction
tx = self.tron.transaction_builder.send_transaction(
File "/home/runner/newtrx/venv/lib/python3.8/site-packages/tronapi/transactionbuilder.py", line 68, in send_transaction
response = self.tron.manager.request('/wallet/createtransaction', {
File "/home/runner/newtrx/venv/lib/python3.8/site-packages/tronapi/manager.py", line 124, in request
return self.full_node.request(url, json=params, method=method)
File "/home/runner/newtrx/venv/lib/python3.8/site-packages/tronapi/providers/http.py", line 84, in request
response = self._request(
File "/home/runner/newtrx/venv/lib/python3.8/site-packages/tronapi/providers/http.py", line 133, in _request
raise ValueError(data['Error'])
ValueError: class org.tron.core.exception.ContractValidateException : Validate TransferContract error, no OwnerAccount.

我认为是你的private key导致了错误。Private用于签署交易并证明所有权

我检查了tron docs

账户激活

新创建的帐户在链上不存在,并且需要存在在通过API查询或区块链找到它们之前被激活探险家。帐户可以通过以下两种方式激活:

从现有帐户发送任意数量的TRX或TRC-10令牌到新账户;调用Java-tron的wallet/createaccount api来创建一个从现有帐户进行交易,然后对交易进行签名,然后广播到波场TRON网络。1 TRX的账户创建费用是为激活新帐户而收费。除此之外,如果发送者以上两笔交易通过押注TRX获得了足够的带宽,那么创建一个帐户将只消耗带宽,否则为0.1TRX将被烧掉以支付带宽。

或者,将TRX或TRC-10令牌转移到非活动的账户地址在智能合约中也可以完成激活该帐户。除了带宽和能量消耗正常的合约调用,这种方式只会消耗额外的25000能源,并且不会消耗1 TRX的账户创建费用和0.1 TRX带宽费。

看起来你必须先激活私钥

相关内容