一个小的示例包
forge-python-sdk的Python项目详细描述
有关如何设置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交换资产有一个大致的了解。尝试创建更复杂的资产!