一个小的示例包

forge-python-sdk的Python项目详细描述


Gitter

forge-python-sdk

有关如何设置forge的详细信息,请签出Forge

forge python sdk的更详细的参考手册可以在Here中找到。

安装

我们建议通过pip安装

pip install forge-python-sdk

对于开发人员:

pip install -r requirements.txt

用法

步骤0

首先使用Forge CLI在本地运行您的锻造。

步骤1

使用forge端口创建一个forge连接(如果forge使用forge-cli运行,则默认为127.0.0.1:28210

fromforge_sdkimportForgeConnf=ForgeConn('127.0.0.1:28210')rpc=f.rpcconfig=f.config

●警告 此步骤适用于每个教程 :::

教程

一级:转账

scenario:alice想将10 tba传输给mike。

●提示 tba是forge chain上的默认货币。如果1tba有16位,则显示为10000000000000000。 :::

步骤1:为Alice和Mike创建钱包
fromforge_sdkimportprotos,utilsalice=rpc.create_wallet(moniker='alice',passphrase='abc123')mike=rpc.create_wallet(moniker='mike',passphrase='abc123')

●提示 moniker是Forge上这个钱包的昵称。passphrase被forge用来将钱包加密到密钥库文件中。关于钱包声明规则的更多详细信息是here。 :::

让我们看看爱丽丝的钱包和这里的帐户详细信息

>>>alicetoken:"886fe22cd8d29a5c0d0fa5b21ec448bd"wallet{sk:"\274\262\331z\000\265\374\271O7f\2640<\214\212G\302y\021\232\363\355.E\207\213&\355\362\260Gu\204\360@e\036\353\357\276\323\340\211\371U\3716\2212\304\223\037{\037\366\267\374\233@\021\215W\027"pk:"u\204\360@e\036\353\357\276\323\340\211\371U\3716\2212\304\223\037{\037\366\267\374\233@\021\215W\027"address:"z1brhJCteRSvHUQ9BytsZePkY4KJ9LFBayC"}>>>rpc.get_account_balance(alice.wallet.address)0

第2步:帮助Alice发送一个poke交易以获得一些资金

现在你已经为爱丽丝和迈克做了钱包,但是他们的账户里没有钱。让我们通过发送一个poke事务来帮助alice赚点钱。

>>>rpc.poke(alice.wallet)hash:"CF0513E473ED13712CDB65EFC196A77BD6193E7DF5124C6233C55732573C85A2"

接收hash意味着事务已被传递到forge,但并不意味着事务成功。为了确认事务已成功发送,让我们深入了解事务的详细信息。

>>>rpc.is_tx_ok('CF0513E473ED13712CDB65EFC196A77BD6193E7DF5124C6233C55732573C85A2')True

如果is_tx_ok返回True,则表示事务已成功执行。现在爱丽丝的帐户里应该有25个tba。

现在让我们检查一下爱丽丝的帐户余额。应该有25 tba。

>>>rpc.get_account_balance(alice.wallet.address)250000000000000000

●提示 poke:每个帐户可以发送一个poke事务,每天获得25 tba。 hash:已签名事务的计算哈希。每个事务都应该有自己唯一的hash。 :::

第3步:将钱从爱丽丝转到迈克

现在爱丽丝的帐户里有25个tba,迈克什么也没有。我们可以通过发送transfer事务来帮助alice向mike传输10tba。

rpc.transfer(to=mike.wallet.address,value=utils.to_unit(100),wallet=alice.wallet)hash:"CAEF155B1A3A684DAF57C595F68821502BC0187BEC514E4660BA1BD568474345"rpc.is_tx_ok('CAEF155B1A3A684DAF57C595F68821502BC0187BEC514E4660BA1BD568474345')Truerpc.get_account_balance(mike.wallet.address)101000000000000000

现在我们可以看到爱丽丝刚刚成功地把10 TBA转到了迈克的帐户上!

恭喜!你已经完成了一级教程!现在你应该对forge的工作原理有一个大致的了解。如果你想要更多的挑战,去看看2级教程。

二级:出售二手笔记本电脑

scenario:迈克想把一台旧笔记本卖给爱丽丝。

步骤1:为Alice和Mike创建帐户
alice=rpc.create_wallet(moniker='alice',passphrase='abc123')mike=rpc.create_wallet(moniker='mike',passphrase='abc123')

在为Alice和Mike创建帐户后,我们帮助Alice获得一些钱来购买Mike的笔记本电脑

rpc.poke(alice.wallet,alice.token)hash:"CF0513E473ED13712CDB65EFC196A77BD6193E7DF5124C6233C55732573C85A2"rpc.get_account_balance(alice.wallet.address)250000000000000000

步骤2:为mike创建笔记本电脑资产

在现实世界中,迈克本可以把他的笔记本电脑卖给爱丽丝。对于伪造SDK,任何物理项都可以以^ {STR 1 } $资产的形式存在。

让我们尝试使用createassettx来帮助mike创建一个笔记本资产。data字段用于用户放置特定于项的信息,其中type_url是如何解码序列化的value字段的提示。在本教程中,为了简单起见,我们只放了thel膝上型电脑的名称。

res,asset_address=rpc.create_asset('test:name:laptop',b'Laptop from Mike',mike.wallet,mike.token)rpc.is_tx_ok(res.hash)Trueasset_address'zjdwghZpZN45ig6ytP74r8VF9CHhQtEjBype'

然后我们可以看到资产的实际情况。

rpc.get_single_asset_state(asset_address)address:"zjdwghZpZN45ig6ytP74r8VF9CHhQtEjBype"owner:"z1QyzoxdPPEk9A2Uz6h18rvjsAHtmJ78mGD"transferrable:trueissuer:"z1QyzoxdPPEk9A2Uz6h18rvjsAHtmJ78mGD"stake{total_stakes{value:"\000"}total_unstakes{value:"\000"}total_received_stakes{value:"\000"}recent_stakes{type_url:"fg:x:address"max_items:128circular:true}recent_received_stakes{type_url:"fg:x:address"max_items:128circular:true}}context{genesis_tx:"9EAC9AF9136D30E5C02EDD46BEF081AD61F3F722BA6FEF4398CC5FBC363DCA30"renaissance_tx:"9EAC9AF9136D30E5C02EDD46BEF081AD61F3F722BA6FEF4398CC5FBC363DCA30"genesis_time{seconds:1557129670nanos:700917000}renaissance_time{seconds:1557129670nanos:700917000}}data{type_url:"test:name:laptop"value:"Laptop from Mike"}

laset字段是data字段,在这里我们可以看到Laptop from Mike。您还可以将更复杂的信息放入其中,如序列化的protobuf消息。

步骤3:用货币兑换资产

现在爱丽丝的帐户里有25个tba,迈克有一个笔记本电脑资产。如果迈克想以10 tba的价格出售笔记本电脑资产,他该怎么办?他可以启动一个ex更改tx

既然迈克要做发送者,我们就把笔记本电脑放在他要交换的地方。同样,爱丽丝将交换10 tba。

mike_exchange_info=protos.ExchangeInfo(assets=[asset_address])alice_exchange_info=protos.ExchangeInfo(value=utils.int_to_biguint(100000000000000000))exchange_tx=protos.ExchangeTx(sender=mike_exchange_info,receiver=alice_exchange_info)tx=rpc.prepare_exchange(exchange_tx,mike.wallet)tx=rpc.finalize_exchange(tx,alice.wallet)res=rpc.send_tx(tx)>>>rpc.is_tx_ok(res.hash)True

prepare_exchange中,我们要求卖方mike验证交易;在finalize_exchange中,我们要求买方alice验证交易。双方确认后,我们可以直接发送交易。

如果我们查一下笔记本电脑的主人,应该是爱丽丝的地址。

rpc.get_single_asset_state(asset_address).owner==alice.wallet.addressTrue

爱丽丝付了笔记本电脑的钱后,她的帐户应该只有15 tba。

>rpc.get_account_balance(alice.wallet.address)150000000000000000

恭喜你!你已经完成了2级教程!现在,您应该对如何创建资产和使用forge sdk交换资产有一个大致的了解。尝试创建更复杂的资产!

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

推荐PyPI第三方库


热门话题
字符串Java字母替换无效   java Spring Roo JPA MS SQL Server无法打开JPA EntityManager组织。冬眠例外GenericJDBCException:无法打开连接   在scala中使用JavaWS对大型数据文件进行java流式处理   Java编译器是否将字节和短字符识别为文本?   java无法查找符号错误,空指针   mongodb在Java中重用数据库连接   java将多个StringArray从字符串文件获取到活动中   java是一个变量,它只保存最后一次鼠标单击的坐标   c#尺寸有限;添加、删除和洗牌   java如何在Android中显示来自资产文件夹的文本文件中的文本   Android应用程序中的java Tensorflow Lite自定义对象检测模型错误   java如何在foreachloop中使用scanner将来自命令行的输入存储到数组中   java如何定义一个好的存储库接口   Android中的java解析动态json对象