이오스 컨트랙트를 삭제하는 법을 알아보자

in #kr6 years ago


(대문은 @carrotcake 님께 의뢰하였습니다)

이오스는 스마트 컨트렉트(자동 계약서), 그리고
각종 정보들을 올리는 공간이 제한되어 있습니다.

마치 온라인 저장 서비스처럼 용량을 사서 써야되죠.

일반인들은 자신이 누군가에게 서비스를 제공하기
위한 프로그램이나 정보를 올릴 일이 없기 때문에
이는 거의 영향이 없지만
앱을 만들어 올리는 개발자들에게 램 공간은
꽤나 신경써야하는 문제죠.

사는것 말고 재활용도 그렇습니다.
램을 산후 스마트 컨트렉트 같은 걸 올렸다고 합시다.
그럼 200kb를 사서 180kb를 썼는데
사람들이 그닥 사용을 안한다면..
해당 서비스는 접어야 할 일이 생길지도 모릅니다.

그럴때 200kb를 다시 팔거나 아니면
새로운 것을 올려야겠죠.

그런데 여기서 의문이 생깁니다.

지우는게 가능한가?

블록체인은 한번 올리면 삭제가 불가능하죠.
그래서 이더리움의 스마트 컨트렉트는 한번 올리면
다른 내용으로 바꾸기 위해선 새로 주소를 파서
새로 올리는 수밖에 없습니다.

그리고 새로운 컨트랙트 주소를 공지하죠.

이오스는 다릅니다.
내용이 바뀌었다고 새로운 계정을 공지하는게 아니라
같은 계정내에서 컨트랙트를 교체합니다.

이는 실제로 블록체인의 내용을 변경하는건 아니고
계정과 연결된 컨트랙트 주소를 끊고
새로운 주소랑 연결하는 개념일겁니다.. (아마..-ㅅ-;)

고로 어딘가에 180kb 의 자료를 업로드하고 연결중이었다가
필요없어지면 연결을 끊는 식이겠죠 (아마-ㅅ-)

근데 제가 못찾아서인지 쉽게 된 명령어가 없더군요.
정식 지갑에서 set code를 이용하는 방법은 못찾았고
eosjs라는 보조(?)측에서 제거하는 방법만 찾았습니다.

그걸 알아봅시다.


먼저 컨트랙트를 업로드할 계정을 만들었습니다.
my.contracts 라는 이름으로 했고
만들자마자 들어간 기본램은 2.66kb 입니다.
계정의 기본정보를 담고 있고 계정을 지우는 방법이
없으므로 저 용량은 돌려받지 못합니다..;ㅁ;


에어드랍등을 할때 필요한 토큰을 만드는 컨트랙트 파일입니다
이오스 기본 프로그램에 기본으로 들어있습니다.
저걸 올립니다


메가랑 기가하고 놀때랑 달리 kb 에도 손이 떨립니다.
무려!! 185kb 나 증가했습니다!

참고로 현재

185kb는 30 이오스에 육박합니다.
똥값이 된 현재의 이오스 가격 5천원을 대입해도
15만원이죠..-0- ㅎㄷㄷ
해운대 깡패들에게 파라솔 자릿세 뺏기는 기분이군요

근데 이게 다가 아닙니다.
이건 단순히 골격을 올린것뿐입니다.

토큰을 만드는 컨트랙트라면 단순히 토큰을 뿅하고
만들고 끝나는게 아니라 토큰을 가진 사람 명단이
다 적혀있습니다.
쉽게 말하면 텅빈 주소록 프로그램만 달랑 올린거라고
봐야죠.
이제 고객들 명단 채워나가면서 용량이 점점 늘게 되는겁니다

그래서 한번 토큰을 만들고 발행해보겠습니다.

토큰을 만든다는 것도 또 기본틀입니다.
예를들어 '발행 권한 계정' '총발행가능 갯수' '명칭'
이런것을 먼저 정하는거죠.


my.token 이라는 계정을 또 하나 만들어서
발행가능한 권한을 줬습니다.
이 총 발행수량 10000개가 한계인 GOD 토큰은
이제 저 계정만이 발행할 수 있습니다

my.contracts 계정은 단순히 컨트랙트 저장용 계정이
되는 것이죠.


또다시 my.guest라는 계정을 만들어서 걔한테
1000 GOD을 발행해줬습니니다.


그리고 발행결과 0.2kb 가 증가하게 되었습니다.
얘뿐만 아니라 뜬금없이

발행자도 램이 0.23kb 정도 증가하게 되는데

@alienzin 님의
🔗[EOS] 에어드랍에 필요한 자원(RAM) 사용량 계산하기
포스팅을 참고하시면 이유가 뭔지 나옵니다.
여튼 여기선 복잡해지니까 얘는 생까고..

다시 발행해보는데 같은애한테 발행하면
새로운 인물 추가가 안되서 용량이 안늘어나니까
또 새로운 계정에게 줬습니다.

어... 죄송함다

고객정보는 발행하는 애한테 쌓이는거 였군요-ㅅ-
이게 바로 실시간 생방송 포스팅의 위엄!!
(컨트랙트 계정은 그 용량 그대로..)

자 다음은 대망의 컨트랙트 삭제입니다.


명령어를 모르겠으니까 편법으로 eosjs란걸 썼습니다


그리고 짜잔~
188.5kb를 싸그리... 는 삭제 못하고

기본 계정 정보 + 토큰 기본 정보 + 토큰 발행자 정보

가 남게 됩니다.

이렇게 말이죠.

이렇듯 컨트랙트를 지운다해도
컨트랙트 업로드와 별개로 이용하면서 쌓이는 정보는
용도가 끝나야만 삭제됩니다.
예를들어 A한테 100 GOD을 주면 그 정보는
A가 100 GOD을 딴데 전송시켜서 0 GOD 이 되면
자동으로 삭제가 되죠.

그래서 만약 에어드랍을 받았는 상황이라면
개발자가 토큰 컨트랙트를 삭제하고 튀더라도
여러분의 토큰 정보는 여전히 유효하게 표시된다는 거죠

그러나..
컨트랙트라는 것은 어떻게 작동하는지가 적혀 있는
계약이자 설명서입니다.

그래서 이것이 지워지면
이것을 참고하는 작동하던 모든 행동이 멈추게됩니다
즉, 이제 해당 토큰은 전송이 안되요-ㅅ-;;
그렇다고 완전 끝난건 아니고 해당 계정의 개발자가
다시 이전과 똑같은 컨트랙트를 올리면 재작동합니다

다음은 이러한 문제에 대해 좀더 알아보겠습니다

Sort:  

오늘은 조금 어려운데요

핵초보라 그렇지요^^
그래도 계속 읽디 보면
서당개가 풍월을 읊듯 지식이
쌓일거라 생각합니다.
질배웠습다^*

넵 사실 요번건 좀 어렵죠
여튼 계약이 지워질 수 있다는 사실만 알면 될듯합니다.

스팀잇하며 지식이 쑥쑥~~입니다.
감사합니다.

  • 서당개 풍월

감사해요 배우고 갑니당

넵 감사합니다!

Coin Marketplace

STEEM 0.20
TRX 0.20
JST 0.034
BTC 89640.94
ETH 3073.42
USDT 1.00
SBD 2.93