面向python的erc20令牌sdk

erc20tokensdk的Python项目详细描述



erc20令牌python sdk
[![构建状态](https://travis ci.org/growlot/erc20token sdk python.svg)(https://travis-ci.org/growlot/erc20token-sdk-python)[![覆盖状态](https://codecov.io/gh/growlot/erc20token-sdk-python/branch/master/graph/badge.svg?token=dovvv9k8ofe)(https://codecov.io/gh/growlot/erc20token-sdk-python)

\不提供任何保证,自行决定使用。

标准环境](https://cloud.google.com/appengine/docs/standard/)在安全的沙盒环境中使用预加载的python解释器执行python
应用程序代码。解释器不能用c代码加载python服务;它是一个"纯"python环境。但是,所需的
[web3包](https://pypi.python.org/pypi/web3/)需要本机实现的其他包,即
[pysha3](https://pypi.python.org/pypi/pysha3)和[cytoolz](https://pypi.python.org/pypi/cytoolz)。
为了克服这一限制,请执行以下操作G:<BR/> 1。用[附加的sha3.py](sha3.py.alt)替换pysha3安装的"sha3.py"。
2。将已安装的"cytoolz"包替换为"toolz"包。


初始化

您的令牌合同的ABI为JSON
(可选)您的私钥,或密钥文件+密码
(可选)在gwei
-中的天然气价格(可选)您的交易的固定天然气限额

**注**:如果您不提供私钥或密钥文件,您将无法使用以下函数:
"获取地址"、"获取乙醚平衡"、"获取令牌平衡"、"发送乙醚"、"发送令牌"。


``python
"导入erc20tokensdk
"导入json

"无私钥初始化sdk(用于一般区块链查询)
"令牌sdk=erc20tokensdk.sdk(提供程序ndpoint_uri='http://localhost:8545',
contract_address='0x04f72aa40046c5fb3b143aaba3ab64d1a82410a7',
contract_abi=json.loads(contract_abi))

ocalhost:8545',
私钥='a60baaa34ed125af0570a3df7d4cd3e80dd5dc5070680573f8de0ecfc1957575',
合同地址='0x04f72aa40046c5fb3b143aaba3ab64d1a82410a7',
合同abi=json.loads(合同abi))

k使用密钥文件
首先,从我的私钥创建密钥文件
erc20tokensdk.create\u keyfile('a60baaa34ed125af0570a3df7d4cd3e80dd5dc5070680573f8de0ecfc1957575',
'my password','keyfile.json')
dk(provider_endpoint_uri='http://localhost:8545',
keyfile='keyfile.json',password='my password',
contract_address='0x04f72aa40046c5fb3b143aaba3ab64d1a82410a7',
contract_abi=json.loads(contract_abi))

带有自定义gas参数的sdk
token\u sdk=erc20tokensdk.sdk(provider\u endpoint\u uri='http://localhost:8545',
private\u key='a60baaa34ed125af0570a3df7d4cd3e80dd5dc5070680573f8de0ecfc1957575',
合同地址='0x04f72aa40046c5fb3b143aaba3ab64d1a82410a7',
合同abi=json.loads(合同abi),
燃气价格=10,燃气限额=50000)
``````
有关更多示例,请参见[sdk测试文件](test/test-sdk.py)。该文件还包含用于使用testrpc和ropsten测试
的预定义值。



\地址是从初始化sdk时使用的私钥派生的。
address=token-sdk.get掴address()
`````

alance
`` python
("address")

金额以醚为单位。
tx_id=token_sdk.send_ether('address',10)

金额以令牌为单位。
tx-id=token-sdk.send-tokens('address',10)
`````
如果乙醚不足,"send-ether"将引发异常。
但是,如果令牌不足,"send-tokens"将成功完成。交易将在区块链上以
失败告终,消耗您所有的汽油。

/>#erc20tokensdk.transactionstatus.pending=1
erc20tokensdk.transactionstatus.success=2
erc20tokensdk.transactionstatus.fail=3


a包含以下字段:
发件人地址-此事务从
发送到的地址-此事务发送到的地址。对于令牌事务,这是解码的收件人地址。
ether_u amount-传输的ether的数量。0表示代币交易。
代币金额-已转移的代币数量。0表示ether事务。
status-事务状态,请参见上文。
num_confirmations-此事务的确认数:
-1表示找不到事务
0表示事务处于挂起状态事务监视

为监视函数提供
回调,在事务状态更改时调用。
注意:可以多次接收挂起状态,这表示事务更改块。

`` python
状态,从地址,到地址,数量:
tx_状态[tx_id]=状态

#很快,事务进入挂起队列
等待范围(0,5000):
如果tx_状态为[tx_id]>;erc20tokensdk.transactionstatus.unknown:
中断
睡眠(0.001)
断言tx_状态[tx_id]>;=erc20tokensdk.transactionstatus.pending

等待直到交易确认
等待in范围(0,90):
如果tx_状态[tx_id]>;erc20tokensdk.transactionstatus.pending:
中断
睡眠(1)
断言tx_状态[tx_id]==erc20tokensdk.transactionstatus.success
````

**注意**:如果您使用的是公共以太坊节点(例如http://mainnet.infura.io),它可能会有一些[jSON-RPCAPI)(https://github.com/ethereum/wiki/wiki/json-rpc)已禁用以防止滥用。通常,它意味着与过滤器相关的调用被阻塞,因此sdk函数"monitor_ether_transactions"和"monitor_token_transactions"将不起作用。作为解决方法,您可以使用
函数"get_transaction_status"或"get_transaction_data"创建自己的事务监视器。


正确:专门处理过滤器和挂起的事务。由于ethereum节点的动态开发状态非常
,对这些功能的支持还不是很稳固,而且从
供应商到供应商,从不同版本到不同版本都有所不同。经过一些实验,我们确定了
[奇偶校验以太坊节点](https://www.parity.io/),版本**v1.8.3-beta**。


如果在负载平衡器后面运行多个以太坊节点,则应在
负载平衡器上启用
[连接粘性](https://stackoverflow.com/questions/10494431/sticky-and-non-sticky-sessions):sdk在它使用的节点上保持一个状态(运行过滤器),粘性确保
请求将到达同一个节点。此外,将事务发送到一个节点不会使它在
另一个节点上立即可见,因此在节点上轮询时,粘性确保事务状态的一致性。

`,因为它们启动一个线程,而gae标准应用程序无法生成线程。


\sdk限制

1。sdk只支持18位小数的令牌,这是最常见的小数位数。当使用不同小数位数的标记
时,需要进行自己的转换。
2.sdk只支持[erc20令牌标准](https://theeesoem.wiki/w/index.php/erc20令牌标准)的有限子集,即"totalsupply"、"transfer"和"balanceof"函数。将根据需要添加其他功能。
欢迎您的个人简历!
3。当前仅在Python2.7中支持使用keyfile和password初始化sdk。


\roadmap

-如果未提供契约abi,则使用默认的erc20 abi。
-使用[web3.py v.4](https://github.com/ethereum/web3.py)。当前使用的是v.3.16.x。
-删除GPL包后将许可证更改为MIT。
-根据需要添加其余的ERC2 0方法。
-添加对[ERC223"传输"方法的支持(https://github.com/ethereum/eips/issues/223)。
-支持各种代币"decimals"。
-使用[etherscan contract api]检索合同ABI(https://etherscan.io/apis合同)。
-使用[CoinMarketCap API](https://coinMarketCap.com/api/)获取当前的美元/BTC/ETH价格。


的未来,我们将努力使用限制较少的许可证。






欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用安卓中不同Java类中声明的变量   java Paypal重新授权失败DCC\u不允许重新授权\u   java删除Nattable中的行号   Java扫描器在循环时数据类型验证中输入错误后未读取换行符   java如何使用jsoup计算div的数量?   java嵌套这样的try/finally子句安全吗?   Java中的安卓格式浮点数(#.#.#.#.#)   java为什么maven总是指向JRE的较低版本   Java中的对象GUI网格   具有中心值和基于值的背景的java单元格   在java中,如何检查布尔值是否存在介于两个数字之间的数字?   等于Java 1.7对hashCode()的重写,其行为不符合我的预期   java使用来自Netbeans的JDBC资源和servlet