Storing Structs is costing you gas 라는 글을 보고 가스를 측정해 보았다. 2018년 글 wow 여러 시나리오가 테스트되어있다. 가스비가 그냥 state 여러개 저장 >>>construct > construct 내 변수 최적화>>+알파 순으로 든다는 주장인데, 직접 실험해보았다. In Solidity (the programming language used for Ethereum smart contracts), you have “memory”, (think RAM on a computer), and “storage” (think the hard drive). Both are set up in chunks of 32 bytes (a byte is roughly a letter, s..
외부 컨트랙트를 부를때 이렇게 인터페이스로 부르는 방식이 있고 //1 interface IVault { function createVault(uint256 gameId) external payable; function addAmount(uint256 gameId) external payable; function withdraw(uint256 gameId, address payable winner) external payable; function claim(uint256 gameId, address payable user) external payable; } //2 address vaultAddr; //3 function setVault(address _vaultAddr) external { vaultAd..
하드햇과 트러플은 모두 블록체인, 이더리움을 개발할때 환경설정을 도와주는 툴이다. 구체적으로는 테스트 노드의 EVM에서 스마트컨트랙트를 compile, run, test 하는과정을 도와준다. 둘다 Javascript 기반 환경을 제공하는데, 예전 튜토리얼을 보면 대부분 트러플을 추천하는데 요새 튜토리얼은 대부분 하드햇을 추천한다. 어떤 차이와 장단점이 있는지 정리해보려한다. Remix도 좋은 툴이지만 둘과는 완전히 맥락이 다르므로 이번에는 패스. Github Hardhat 3.3k stars, 마지막 업데이트 1시간 전 Truffle 13.2k stars, 마지막 업데이트 1달 전 이것만보면 하드햇을 쓰는건 모험처럼 보일수도 있다. Solidity2021 survey 2020년엔 분명 하드햇-트러플 유저..
첫 NFT 를 이더리움 메인넷에 배포했다. 다행히 코인값도 떨어지고 가스비도 낮아서(15그웨이 고맙다) 적은부담으로 할수 있었다. 컨트랙트도 올리고 민팅도 잘되고 디자인도 이쁘게 나오고 이더스캔에도 컨트랙도 잘 올렸는데 이게 뭐람? 느낌표가 있길래 눌러봤더니 가능한 버그가 세개나? 이럴수가 열심히 디버깅한다고 했는데 이런 참사가.. 싶어서 3개를 들여다 보았다. 다행히 very low-severity 라고 떠서 사소하긴하지만 신경쓰이잖아. (1)DataLocationChangeInInternalOverride (2)NestedCallataArrayAbiReencodingSizeValidation (3)SignedImmutables 3종류가 떴다. 혹시나하고 다른 nft 프로젝트의 컨트랙트를봤는데 안-심..
NFT 민팅할때 보통 화이트리스트에게 먼저 NFT를 민팅할 권리를 준다. 솔리디티에서 이부분을 구현할때 메모리나 맵에 올리면 가스비로 아주 큰 비용을 지불해야한다. 이 문제를 해결하는것이 머클트리이다 Merkle Tree 사용법 https://medium.com/@ItsCuzzo/using-merkle-trees-for-nft-whitelists-523b58ada3f9 간략하게말하면 js단: (1) WL 리스트를 암호화해서(keccak256쓰던 SHA쓰던 본인선택) 머클트리에 넣는다. 그럼 암호화된 전체 노드가 나오는데 Root Node만 키처럼 들고있음 const leaves = whitelistAddresses.map(addr => keccak256(addr)); tree = new MerkleTre..
Variables are declared as either storage, memory or calldata to explicitly specify the location of the data. storage - variable is a state variable (store on blockchain) memory - variable is in memory and it exists while a function is being called calldata - special data location that contains function arguments -스토리지가 당연히 가스비가 제일 많이든다. -메모리 이때 말하는 메모리는 evm의 메모리 https://ethereum.org/en/developer..
1. 이벤트 내뿜기(Emitting events) - 실행하기, 부르기인가 싶었는데 그건 invoke임.. 2단계가 필요하다. - 우선 이벤트를 선언한다 event ExampleEvent(uint _exampleArgument); - function 바디 안에서 선언한 이벤트를 emit한다. function exampleFunction() external { emit ExampleEvent(5); } emit를 한 후에 이벤트를 invoke할수 있다. 🚩이벤트는 주로 어퍼카멜케이스를 쓰고, 펑션은 주로 로워카멜케이스를 쓴다. 이걸 naming convention (작명관례)라한다. 이벤트를 emit한 컨트랙트를 eth_getLogs 를 통해 로그를 찍으면 이런 값을 리턴받는데, 데이터와 토픽에대해 논해보..
체인샷 기본강의 이번에는 다른 스마트컨트랙을 부르는 법을 배운다 1. Enum contract Player { enum Directions { Up, Down, Left, Right } } pure: function is isolated, does not read from anything outside itself and promises not to modify contract state. view: function can read contract state but promises not to modify contract state. 뷰도 컨트랙트의 데이터를 바꾸지 않는다