使用Soroban Python SDK部署和调用具有恒星帐户授权的授权合同
#python #soroban #sorobanathon #stellar

在我的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_kpop_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中实施。