智能合约部署时是否可以充值?

Mar*_*rri 5 solidity rsk ethers.js hardhat

假设我有一个 Solidity 智能合约MultiToken.sol,正在使用Hardhat开发和测试并部署到RSK网络。\n\xe2\x80\x8b

\n
//SPDX-License-Identifier: Unlicense\npragma solidity ^0.8.0;\n\xe2\x80\x8b\nimport "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";\n\xe2\x80\x8b\ncontract MultiToken is ERC1155 {\n    constructor(string memory uri) ERC1155(uri) {}\n}\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\x8b\n我正在测试before部分部署智能合约:\n\xe2\x80\x8b

\n
//SPDX-License-Identifier: Unlicense\npragma solidity ^0.8.0;\n\xe2\x80\x8b\nimport "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";\n\xe2\x80\x8b\ncontract MultiToken is ERC1155 {\n    constructor(string memory uri) ERC1155(uri) {}\n}\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\x8b\n我希望能够在部署交易期间将一些RBTC转移到我的智能合约地址。是否可以在部署时使用 Hardhat 和 Ether 充值智能合约的余额?\n\xe2\x80\x8b\n具体来说,我可以通过单个交易来完成此操作吗?\n\xe2\x80\ x8b\n供参考,这是我的hardhat.config.js:\n\xe2\x80\x8b

\n
const { expect } = require(\'chai\');\nconst { ethers } = require(\'hardhat\');\n\xe2\x80\x8b\ndescribe(\'MultiToken\', () => {\n  let multiToken;\n\xe2\x80\x8b\n  const uri = \'https://token-cdn-domain/{id}.json\';\n\xe2\x80\x8b\n  before(async () => {\n    const factory = await ethers.getContractFactory(\'MultiToken\');\n    multiToken = await factory.deploy(uri);\n    await multiToken.deployed();\n  });\n\xe2\x80\x8b\n  it(\'MultiToken URI must be correct\', async () => {\n    const multiTokenUri = await multiToken.uri(0);\n    expect(multiTokenUri).to.equal(uri);\n  });\n});\n
Run Code Online (Sandbox Code Playgroud)\n

Pet*_*jda 6

您可以声明 constructor as payable,然后覆盖value部署事务的参数(默认值 0)。

contract MultiToken is ERC1155 {
    constructor(string memory uri) ERC1155(uri) payable {}
}
Run Code Online (Sandbox Code Playgroud)
multiToken = await factory.deploy(uri, {
    value: ethers.utils.parseUnits("1"), // 1 RBTC to wei
});
Run Code Online (Sandbox Code Playgroud)

文件: