Be lazy, Be crazy

Klaytn API Service (KAS) 기반 서버개발(3) - contract 사용하기 본문

BlockChain/클레이튼

Klaytn API Service (KAS) 기반 서버개발(3) - contract 사용하기

정신이 많이없는 개발자 2021. 12. 11. 17:07
728x90
반응형
♨항상 글 마지막에 질문을 남기는데 혼자서 고민해보고 답하는 시간을 가져봅시다!
    항상 저 같은 ㅃㄷㄱㄹ를 위해서 자세하고 쉽게 설명을 하도록 노력하겠습니다
 *욕은 사절 비판은 환영*

* 나와 같은 초보자들은 그냥 순서대로 따라오시면 실습을 진행할 수 있습니다. 

 

* 전체 코드 및 설정은 github에 등록했습니다. 편하게 가서 보고 사용하시면 됩니다.

지금 main으로 되어있으면 코드가 안보입니다. master로 바꿔주세요!!!

*github 주소 : https://github.com/ms3221/Klay-API-Service/tree/master

 

GitHub - ms3221/Klay-API-Service

Contribute to ms3221/Klay-API-Service development by creating an account on GitHub.

github.com


*스마트 컨트랙 주소 : 0x167156016b0c8fa627583eda7ed209b1eb8482cb

*클레이 스코프 - https://baobab.scope.klaytn.com/account/0x167156016b0c8fa627583eda7ed209b1eb8482cb?tabId=internalTx 

 

Klaytnscope

Klaytnscope allows you to find data by monitoring network health and statistics of Klaytn as well as profiling blocks and transactions on Klaytn.

baobab.scope.klaytn.com


학습목표↓

안녕하세요! 그러면 저번 시간에 이어서 
Klaytn IDE를 사용해서 스마트컨트랙을 배포하고 caver.js로 함수를 호출하는 방식을 배워봅시다.

https://ide.klaytn.com/

 

Klaytn IDE

 

ide.klaytn.com

클레이튼 IDE를 에서 스마트컨트랙을 작성하고 배포할 예정입니다.

 

test.sol을 만들어보자

     이 코드를 그대로 작성해주도록 하자

// Klaytn IDE uses solidity 0.4.24, 0.5.6 versions.
pragma solidity >=0.4.24 <=0.5.6;


contract Test{
    function Bye() public pure returns(string memory){
        return "BYE";
    }
}

카이카스에서 개인키를 가져오는 방법

카이카스에서 개인키를 가져오는 방법

● 오른쪽 Account +버튼을 클릭하면 밑에와 같은 창이 뜨는데 위에서 가져온 개인키를 넣어주면 계정이 등록된다!

    * 스마트컨트랙을 배포 할 때 gas비가 필요하기 때문에 Klay를 가지고 있는 계정을 등록시켜주도록 하자.

Klaytn IDE에 계정을 등록시키기
auto compile check

auto compile 체크되어있는지 확인합시다.


●작성한 컨트랙트를 compile하고 deploy합시다.

-블록체인 플랫폼에 작성한 컨트랙트를 올렸다. 라고 생각합시다-

deploy
deploy 성공시 볼 수 있는 receipt

 

 지금까지는 caver.js를 사용하기전에 스마트컨트랙을 klaytn IDE에서 작성을 했고 작성된 컨트랙을 자신의 계정을 통해서 블록체인 플랫폼에 올렸다. 그렇다면??? 저번시간에 klayScope에서 자신의 해쉬값을 통해서 확인할 수 있지 않았나?

transaction hash 값으로 klay Scope에서 확인하기
클레이튼 스코프에서 확인하기

● 지금까지 따라왔다면 준비는 끝났다.

이제부터는 caver.js를 사용해서 내가 배포한 함수를 불러 올 수 있도록 하자! 

*https://ko.docs.klaytn.com/bapp/sdk/caver-js/getting-started

 

시작하기 - Klaytn Docs KO

...

ko.docs.klaytn.com

항상 doc를 참고해서 코드를 작성하자.

 

♣이전 환경셋팅 및 준비는 전글 및 전전글에 있으니 참고하고 다시 돌아오기를 바래요~~~ (귀찮해서 그래요 sorry)

    *주의 사항 : 만약에 당신이 위에를 따라하는게 어렵다? 그러면 그냥 밑에 코드를 그대로 가져가서 실습해 보시면 따라할 수있어요 

        다만, 이점을 명심하자. 나라는 사람이 Test라는 컨트랙트를 만들었고 그 컨트랙트 안에 Bye()함수가 있다. 그리고 그 컨트랙트를 

블록체인에 올렸고 나는 지금 올려놓은 함수를 js언어를 통해서 사용하는 것이다. 즉 성공하면 'BYE'라는 글이 출력이 되야한다.

코드↓

더보기
더보기
let abi = [
	{
		"constant": true,
		"inputs": [],
		"name": "SayHello",
		"outputs": [
			{
				"name": "",
				"type": "string"
			}
		],
		"payable": false,
		"stateMutability": "pure",
		"type": "function"
	},
	{
		"constant": true,
		"inputs": [],
		"name": "Bye",
		"outputs": [
			{
				"name": "",
				"type": "string"
			}
		],
		"payable": false,
		"stateMutability": "pure",
		"type": "function"
	}
];




app.get("/contract", async (req, res) => { 
      // 이것 하나로  ()
    const myContract = await new caver.contract(abi,'0x167156016b0c8fa627583eda7ed209b1eb8482cb');
    console.log(1);
    //const val = await myContract.methods['Bye'].call();
    const val = await myContract.methods.Bye().call();
    console.log(val);
   // console.log(contract.SayHello().call().then(console.log));	//	[2]
   
  });

  ABI는 밑에 사진과 같이 클릭해주면 자동으록 복사가 된다.

ABI

♠ Contract 객체 생성 

contract 객체 생성하기&amp;amp;amp;nbsp;

 여기서 주의할점 abi 다음나오는 주소는 여러분의 계정주소가아니에요!!!!!!! 스마트컨트랙은 컨트랙만의 주소가 있어요!! 그래서 컨트랙트 주소를 사용할 수 있도록해주세요. 저는 이부분에서 엄청난 시간을 소모했습니다 바보같이.... 혹시 이런오류가 뜨면 이부분을 다시 확인하세요

주소를 잘못 사용하면 확인되는 오류

♠ 내가 만든 함수 불러오기!! 

내가 만든 함수 불러오기

나는 Bye()라는 함수를 만들었따!! 

그 함수는 bye를 리턴해준다!! 그래서 bye가 나온다면 당신은 contract를 제대로 사용하고 있는 것이다.

함수를 제대로 되면 Bye값이 나오는 것을 확인할 수 있다.


자 지금까지 caver.js 몇가지 함수에 대해서 배웠다. 아주 기초적인 함수이지만 이해하는데 도움이 되었으면 하는바람이다. 

여기서 문제가 하나있다!  내꺼 코드를 그대로 가져다가 사용한다면 SayHello 함수와 Bye함수 두가지가 있다.  위에 예제는 Bye함수를 사용했는데 SayHello 함수를 써서 hello 가 나오게 할 수 있겠는가? 밑에 코드에 붙여놓겠다. 스스로 해보고 답을 확인하면 좋을 것 같다.

더보기
더보기
const val = await myContract.methods.SayHello().call();

 요놈 한줄만 필요하다!! 


총 정리 

목표 : caver.js를 사용해서  내가만든 함수를 호출해보기. 목표 100% 달성 

   - keep : 공식 doc를 읽고 따라 갈 수 있었다. doc에 잘 나와있어서 계속해서 doc를 읽고 연습을 해야겠다.

   - problem : contract 함수를사용할 때 넣어야 하는 파라미터값을 제대로 이해하지 못하고 있어서 오류를 발견해도 해결 할 수 없었다.
                       파라미터값이 무엇이들어가는지 그리고 왜 그값이 들어가는지 조금 더 고민해보고 찾아 볼 필요가 있다. 

  - try : 스마트 컨트랙을 조금더 활용성 있게 작성해보고 caver.js를 사용해서 함수를 호출해서 프론트와 연결시켜 실질적인 서비스를 만들 수 있도록 고민하고 여러가지로 test를 해봐야겠다.

 ** 추가적으로 https://forum.klaytn.com/t/caver-js/628/2

 

Caver.js 사용 컨트랙트 함수 호출 문의

안녕하세요. 먼저 비슷한 코드로 따로 테스트를 해보았는데, 정상적으로 작동하는 것을 확인했습니다. 발생한 에러는 totalSupply의 리턴값이 유효하지 않을 경우 발생하는 에러입니다. 아래에 코

forum.klaytn.com

이 웹싸이트를 들어가게 되면 클레이튼 측에서 개발자들을 위해서 만들어논 커뮤니티가 있다. caver.js 또는 Java 를 사용해서 클레이튼 블록체인 서비스를 구현하는 사람들에게 다양한 해결 방법을 제시하고 있으니 관심있으신 분들은 들어가서 이용하면 될 것 같다!!!!1

반응형
Comments