面向python的erc20令牌sdk

erc20token的Python项目详细描述


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


免责声明

sdk仍处于测试阶段。不提供任何保证,自行决定使用。

dard环境](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
"导入erc20token
"导入json

"无私钥初始化sdk(用于一般区块链查询)
"令牌sdk=erc20token.sdk(提供程序端点t_uri='http://localhost:8545',
合同地址='0x04f72aa40046c5fb3b143aaba3ab64d1a82410a7',
合同abi=json.loads(合同abi))


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

keyfile
首先,从我的私钥创建keyfile
erc20token.create\u keyfile('a60baaa34ed125af0570a3df7d4cd3e80dd5dc5070680573f8de0ecfc1957575',
'my password','keyfile.json')
point_uri='http://localhost:8545',
keyfile='keyfile.json',password='my password',
contract_address='0x04f72aa40046c5fb3b143aaba3ab64d1a82410a7',
contract_abi=json.loads(contract_abi))

gas参数
token_sdk=erc20token.sdk(provider_endpoint_uri='http://localhost:8545',
private_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"将成功完成。交易将在区块链上以
失败告终,消耗您所有的汽油。

#erc20token.transactionstatus.pending=1
erc20token.transactionstatus.success=2
erc20token.transactionstatus.fail=3

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

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

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

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

交易确认
等待范围(0,90):
如果tx_status[tx_id]>;erc20token.transactionstatus.pending:
break
sleep(1)
assert tx_status[tx_id]==erc20token.transactionstatus.success
````

**注意**:如果您使用的是公共以太坊节点(例如http://mainnet.infura.io),它可能会有一些[json-rpc api](https://github.co)m/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

-使用[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第三方库


热门话题
javascript问题:通过URL用网站数据填充Textview   java TabLayout Android,如何用几个标签填充整个屏幕宽度,并用大量标签滚动?   Eclipse Java运行的文件不再存在于我的工作区中   安装两个Java版本时,使用Java的windows链接不起作用   java将多个图形添加到单个JPanel   java Kafka ConsumerFactory,带有两个Desiarizer   使用反射更改java类超类   当一致性测试失败时,java有没有办法让堆栈跟踪显示在控制台中   java映射到基元类型的HashMap的快速替代方案是什么?   java关闭一个jframe所有剩余的打开jframe都将关闭。   java为什么不推荐“使用getString()获取设备标识符”?   java值比较和值赋值之间有什么性能差异吗?   Java实体数组到JavaScript数组   java使用流将一个列表转换为另一个列表   在JTree中保存对象,但更改显示的名称(java swing)?   java“Hello world”Android应用程序,文件尽可能少,没有IDE,只有文本编辑器   java在方法之间传递值   java如何为项目数组创建ParseQuery?