在我的previous post中,我向您展示了如何使用Soroban Python SDK部署包裹的令牌合同。在这篇文章中,我们将使用Soroban Python SDK部署并调用具有Stellar帐户授权的身份合同。
准备
首先,创建一个Futurenet帐户,该帐户将用于部署验证合同并使用Soroban Python SDK调用合同。在Stellar Laboratory创建帐户,并确保为其提供资金。我将使用的帐户:
Public Key GATQFKA7BV7LYYE6UJ2LRL56W3BZRRSWTINA6TG2EM5CCDORFIERAKWV
Secret Key SCHKLGAGY7QGWUKUFDGHEQMSCPFZNMLEHQE6Y6WPGYGHQIM23T3NJE3C
我们要使用的文件:
koude0-授课合同
koude1 -Python脚本部署合同。
koude2- python脚本援引符合恒星帐户授权的验证合同。
部署合同
要部署合同,打开soroban_deploy_contract.py
文件并调整以下参数:
secret = "SCHKLGAGY7QGWUKUFDGHEQMSCPFZNMLEHQE6Y6WPGYGHQIM23T3NJE3C" #Put your Account Secret Key here
rpc_server_url = "https://horizon-futurenet.stellar.cash:443/soroban/rpc"
network_passphrase = Network.FUTURENET_NETWORK_PASSPHRASE
contract_file_path = "./soroban_auth_contract.wasm"
secret
:我们将用来部署验证合同的帐户的秘密键。 用您自己的帐户秘密密钥替换值。
rpc_server_url
:您将用于与Soroban Futurenet网络交互的RPC服务器的URL。
network_passphrase
:您将使用的密码选择网络。这可以根据您与您交互的网络进行更改;在这种情况下,我们将使用Futurenet。
contract_file_path
:验证合同文件的路径。
使用更改保存Soroban_deploy_contract.py文件,然后使用此命令在命令提示符中运行脚本:
python `soroban_deploy_contract.py`
脚本完成运行后,您将收到合同ID。请确保将其保存以备后用。
contract id: af0aadafacc6bcb73b6ec9aeee03350ca0c6a3430e099d4b5dd371c6e07cc214
调用合同
要调用Auth合同,打开soroban_auth_with_stellar_account.py
文件并调整以下参数:
contract_id = "af0aadafacc6bcb73b6ec9aeee03350ca0c6a3430e099d4b5dd371c6e07cc214"
tx_submitter_kp = Keypair.from_secret(
"SAAPYAPTTRZMCUZFPG3G66V4ZMHTK4TWA6NS7U4F7Z3IMUD52EK4DDEV"
)
# If tx_submitter_kp and op_invoker_kp use the same account, the submission will fail, a bug?
op_invoker_kp = Keypair.from_secret(
"SCHKLGAGY7QGWUKUFDGHEQMSCPFZNMLEHQE6Y6WPGYGHQIM23T3NJE3C"
)
tx_submitter_kp
:您将用于提交交易的帐户的秘密密钥。
op_invoker_kp
:您将用来调用合同功能的帐户的秘密密钥。 用您自己的帐户秘密密钥替换值。
contract_id
:您要调用的授课合同的合同ID。 在部署合同之前收到的合同ID替换值。
使用更改保存soroban_auth_with_account
文件。注意:某种程度上,使用相同的Keypair用于tx_submitter_kp
和op_invoker_kp
使交易未能被确定,也许这是一个错误。如果是一个错误,则可以预期这是因为Soroban仍在开发中。
在运行脚本之前,我想解释此特定代码:
nonce = soroban_server.get_nonce(contract_id, op_invoker_kp.public_key)
func_name = "increment"
args = [Address(op_invoker_kp.public_key), Uint32(10)]
invocation = AuthorizedInvocation(
contract_id=contract_id,
function_name=func_name,
args=args,
sub_invocations=[],
)
contract_auth = ContractAuth(
address=Address(op_invoker_kp.public_key),
nonce=nonce,
root_invocation=invocation,
)
contract_auth.sign(op_invoker_kp, network_passphrase)
从上面的脚本中,我们要调用的合同功能是increment
函数,其恒星帐户按键作为参数,并使用它来获取nonce
并设置地址并签名ContractAuth
。 这是用于帐户授权的,特定的帐户地址授权调用。
现在我们将使用此命令运行脚本:
python soroban_auth_with_account.py
我们会得到结果:
transaction result: <SCVal [type=1, u32=<Uint32 [uint32=10]>]>
再次运行脚本,我们将获得结果:
transaction result: <SCVal [type=1, u32=<Uint32 [uint32=20]>]>
我们称为按预期工作的increment
函数。
关闭
在这篇博客文章中,我们介绍了使用Soroban Python SDK通过帐户授权来部署和调用Auth合同的步骤。从脚本中,您将获得洞察力的基本索罗班帐户授权如何在Soroban Python SDK中实施。