如何让用户在前端部署 NEAR 协议智能合约?

Posted

技术标签:

【中文标题】如何让用户在前端部署 NEAR 协议智能合约?【英文标题】:How to allow users to deploy NEAR protocol smart contract on the frontend? 【发布时间】:2021-08-18 23:55:07 【问题描述】:

接近能够让个人用户从 NEAR 的前端部署他们自己的智能合约,但我遇到了一个错误。一、代码:

const account = await near.account('polluterofminds.testnet');
const res = await axios.get("/api/contract");
  
const contractRaw = res.data;
const uint8 = new Uint8Array(Buffer.from(contractRaw))

const result = await account.deployContract(uint8);
console.log(result);

执行此操作时,我收到以下错误:

Error: The transaction contains more then one action, but it was signed with an access key which allows transaction to apply only one specific action. To apply more then one actions TX must be signed with a full access key

不知道如何解决这个问题。据我所知,我的 polluterofminds.testnet 帐户拥有完整的访问密钥,并且我已使用该帐户登录。

有人成功完成了吗?

【问题讨论】:

【参考方案1】:

这里是前段时间创建的一个示例,该示例演示了将合同部署到用户帐户作为通信协议的一部分

https://github.com/metanear/metanear-web/blob/master/src/Home.js#L96

更新

(对此答案发表评论)

@JustinHunter 有 2 种类型的访问密钥:FullAccess,可让您使用所有 8 种支持的操作签署交易,FunctionCall 访问密钥仅允许您使用一种类型的交易签署交易,FunctionCall 操作。

您可以在这里看到更多关于事务和操作、键等的信息:

https://docs.near.org/docs/concepts/transaction https://docs.near.org/docs/concepts/account#access-keys

以及此视频中有关此限制的一些相关词语: https://youtu.be/ZM7TCONx9BI?t=2127

【讨论】:

这看起来和我的基本一样。我仍然收到相同的错误:``` 交易包含多个操作,但它是使用访问密钥签署的,该访问密钥允许交易仅应用一个特定操作。要应用多个操作,TX 必须使用完整的访问密钥进行签名``` 我认为这只是表明我不知道帐户和访问密钥应该如何工作。我尝试部署合同的帐户是我登录时使用的帐户。默认情况下,它似乎具有完整的访问密钥。但也许不是? 这对@amgando 很有帮助!我唯一的问题是如何使用 js-sdk 创建完整的访问密钥?我在任何地方都找不到它的记录,但我确定我只是想念它。【参考方案2】:

您似乎使用仅函数调用访问密钥来签署交易。要(重新)部署 NEAR 协议中的合约,您必须使用完全访问密钥。有问题的帐户具有完全访问权限和仅限函数调用的密钥,但您需要检查最终使用的是哪一个。

【讨论】:

以上是关于如何让用户在前端部署 NEAR 协议智能合约?的主要内容,如果未能解决你的问题,请参考以下文章

NEAR 智能合约开发

NEAR 智能合约错误:“合约未初始化”

是否可以在 Rust 的 NEAR 智能合约中验证 NIST P-256 曲线?

如何在 NEAR 协议中构建和部署多个合约

ReactJS 不从产品上的智能合约(NEAR)调用方法(查看时测试网不存在)

如何使用前端部署智能合约。就像 REMIX IDE 正在做的那样