# 커스텀 컨트랙트의 생성자를 수정하여 배포 중 질문

**URL:** <https://devforum.kaia.io/t/topic/6276>\
**Category:** Kaia\
**Tags:** caver-js\
**Created:** [12월 8, 2022, 6:51오전 UTC](https://devforum.kaia.io/t/topic/6276 "2022-12-08T06:51:45Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![harvey](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/harvey/32/3024_2.png) [@harvey](https://devforum.kaia.io/u/harvey)\
**Post date:** [12월 8, 2022, 6:51오전 UTC](https://devforum.kaia.io/t/topic/6276/1 "2022-12-08T06:51:45Z")

</div>

안녕하세요.  
현재 커스텀한 KIP7타입의 컨트랙트를 필요에 따라 이름, 심볼값을 변경하여 재배포할 수 있도록 로직을 구현중인데요.  
코드는 아래와 같습니다.

```auto
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**

> **[caver.contract](https://ko.docs.klaytn.foundation/dapp/sdk/caver-js/api-references/caver.contract#mycontract-deploy)**

위의 페이지에서 argument의 값은 생성자에게 전달되는 값이라고 해서 위의 코드를 실행 시켰을 때,  
name = “newName” , symbol = “newSymbol” 을 가진 contract가 배포되는 것을 기대하였는데, 코드를 실행하니 아래 사진과 같은 에러가 나더라구요. 혹시 제가 잘못 이해한 걸까요?

 ![image](https://canada1.discourse-cdn.com/flex035/uploads/klaytn/original/2X/6/608c61c8df79bae51682788d13b98d8ed7fc32c0.png)

**질문 2**  
코드 내용중에 주석처리한 코드  
const contractBytecode = caver.abi.encodeContractDeploy(jsonAbi, abiByteCode})  
가 있는데요.

> **[caver.abi](https://ko.docs.klaytn.foundation/dapp/sdk/caver-js/api-references/caver.abi#encodecontractdeploy)**

이 페이지에서 보면 encodeContractDeploy의 리턴타입에  
string : 바이트코드 + 매개변수를 의미하는 생성자 인자를 포함한 ABI 인코딩된 스마트 컨트랙트 배포.  
라고 적혀있는데 혹시 이 말이 의미하는게 배포과정까지 포함되어있다고 하는건지, 그렇다면 encodeContractDeploy에 param 추가하여 기존 컨트랙트 + param 형태로 배포할 수 있는건지 궁금합니다.

 ![image](https://canada1.discourse-cdn.com/flex035/uploads/klaytn/original/2X/7/7b8a181fbdbb481f1bfc28921c22660d67612425.png)

혹은 이미 존재하는 abi값의 이름, 심볼값을 변경하여 컨트랙트를 배포할 수 있는 더 좋은 의견이 있으시다면 답글달아주시면 감사하겠습니다! 감사합니다 🙂

---

<div class="post-metadata">

**Author:** ![jack\_jin](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jack_jin/32/2305_2.png) [@jack\_jin](https://devforum.kaia.io/u/jack_jin)\
**Post date:** [12월 9, 2022, 3:15오전 UTC](https://devforum.kaia.io/t/topic/6276/2 "2022-12-09T03:15:16Z")

</div>

안녕하세요 질문해주신 내용에 순차적으로 답변드리면,

1. 함수의 파라미터와 전달하신 파라미터가 매칭이 안되서 나는 에러인데요, 생성자 함수를 한번 더 확인해보시면 좋을거같습니다.
2. encodeContractDeploy함수는 인코딩결과만을 리턴해주는 함수입니다.  
한번 해보시고 추가 질문 부탁드리겠습니다. 보다 정확한 내용을 위해서는 컨트렉트 코드와 abi를 공유해주시면 한번 테스트해보고 추가답변 드릴 수 있을거같습니다.

---

<div class="post-metadata">

**Author:** ![harvey](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/harvey/32/3024_2.png) [@harvey](https://devforum.kaia.io/u/harvey)\
**Post date:** [12월 9, 2022, 3:36오전 UTC](https://devforum.kaia.io/t/topic/6276/3 "2022-12-09T03:36:36Z")

</div>

답변 정말 감사합니다!  
2번은 실행해봤는데요 bytecode값을 리턴하길래  
매개변수로 받은 param이 추가된 바이트 코드가 반영되어 자동적으로 재배포되는가에 대한 질문이었습니다!  
인코딩 결과값만을 리턴해주는 함수이기 때문에 재배포하는데 사용하기에는 힘들겠군요 감사합니다 🙂

추가적으로 1번 질문에 대해 여쭙고 싶은게 하나 더 있습니다.

 ![image](https://canada1.discourse-cdn.com/flex035/uploads/klaytn/original/2X/6/6c4cb44588c7bdad83361cb192e57e2c393e0769.png)

사진에서 new caver.contract() 의 매개변수로 jsonABI, address 는 필수값이고 option값의 모든 요소가  
선택사항(optional)이라고 기재되어있어,

```auto
new caver.contract(jsonAbi, newKeyring.address, { gasPrice: '25000000000' })

```

이렇게 작성하였는데요  
혹시 생성자 함수를 한번 더 확인하라고 하신게 제 스마트컨트랙트의 생성자 함수를 의미하신걸까요? 너무 기본적인 질문이라면 죄송합니다 ㅜㅜ

---

<div class="post-metadata">

**Author:** ![jack\_jin](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jack_jin/32/2305_2.png) [@jack\_jin](https://devforum.kaia.io/u/jack_jin)\
**Post date:** [12월 9, 2022, 3:51오전 UTC](https://devforum.kaia.io/t/topic/6276/4 "2022-12-09T03:51:15Z")

</div>

네 맞습니다. 컨트랙트의 생성자 함수를 확인해보시면 좋을거같아요

---

<div class="post-metadata">

**Author:** ![harvey](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/harvey/32/3024_2.png) [@harvey](https://devforum.kaia.io/u/harvey)\
**Post date:** [12월 9, 2022, 6:12오전 UTC](https://devforum.kaia.io/t/topic/6276/5 "2022-12-09T06:12:47Z")

</div>

답변 정말 감사합니다. 의견 주신대로 시도해보고 다시 말씀드리겠습니다.  
정말 감사합니다 🙂

---

<div class="post-metadata">

**Author:** ![harvey](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/harvey/32/3024_2.png) [@harvey](https://devforum.kaia.io/u/harvey)\
**Post date:** [12월 12, 2022, 1:20오전 UTC](https://devforum.kaia.io/t/topic/6276/6 "2022-12-12T01:20:49Z")

</div>

@jack_jin

 ![image](https://canada1.discourse-cdn.com/flex035/uploads/klaytn/original/2X/9/9040e4e5b19fdf40fc2907f1db9f6c3ad0a60359.png)

아래와 같이 생성자 함수에 매개변수를 넣어 컨트랙트를 생성하는 식으로 해결했습니다.  
도움 주셔서 정말 감사합니다 🙂

후에 같은 내용을 검색하는 다른 분들께 도움이 될지 몰라 아래 참고했던 레퍼런스 링크 달아놓습니다.

> **[1. Writing ERC-20 Smart Contract](https://docs.klaytn.foundation/smart-contract/sample-contracts/erc-20/1-erc20)**
