안녕하세요.
현재 커스텀한 KIP7타입의 컨트랙트를 필요에 따라 이름, 심볼값을 변경하여 재배포할 수 있도록 로직을 구현중인데요.
코드는 아래와 같습니다.
const contractAbi = fs.readFileSync("./src/contract.json", "utf8")
async function caDeploy() {
let rawAbi: Record<string, any>
let jsonAbi: AbiItem[]
let abiByteCode: string
try {
rawAbi = JSON.parse(contractAbi)
jsonAbi = rawAbi.abi
abiByteCode = rawAbi.bytecode
} catch (e) {
console.error(e)
}
const newKeyring = generateKeyringFromPrivateKey(privateKey)
caver.wallet.add(newKeyring)
// const contractBytecode = caver.abi.encodeContractDeploy(jsonAbi, abiByteCode})
const myContract = new caver.contract(jsonAbi, newKeyring.address, { gasPrice: '25000000000' })
const newContract = await myContract.deploy({ data: abiByteCode, arguments: ["newName", "newSymbol"] }).send({ from: newKeyring.address, gas: 7500000 })
console.log(newContract)
}
caDeploy()
여기서 질문이 있는데요.
질문 1
위의 페이지에서 argument의 값은 생성자에게 전달되는 값이라고 해서 위의 코드를 실행 시켰을 때,
name = “newName” , symbol = “newSymbol” 을 가진 contract가 배포되는 것을 기대하였는데, 코드를 실행하니 아래 사진과 같은 에러가 나더라구요. 혹시 제가 잘못 이해한 걸까요?
질문 2
코드 내용중에 주석처리한 코드
const contractBytecode = caver.abi.encodeContractDeploy(jsonAbi, abiByteCode})
가 있는데요.
이 페이지에서 보면 encodeContractDeploy의 리턴타입에
string : 바이트코드 + 매개변수를 의미하는 생성자 인자를 포함한 ABI 인코딩된 스마트 컨트랙트 배포.
라고 적혀있는데 혹시 이 말이 의미하는게 배포과정까지 포함되어있다고 하는건지, 그렇다면 encodeContractDeploy에 param 추가하여 기존 컨트랙트 + param 형태로 배포할 수 있는건지 궁금합니다.
혹은 이미 존재하는 abi값의 이름, 심볼값을 변경하여 컨트랙트를 배포할 수 있는 더 좋은 의견이 있으시다면 답글달아주시면 감사하겠습니다! 감사합니다