목록개발/Solidity (3)
EPguy
아래 내용은 OpenZepplin 에서 설명하는 내용중 일부를 가져왔습니다. https://blog.openzeppelin.com/deconstructing-a-solidity-contract-part-iii-the-function-selector-6a9b6886ea49/ Funstion Selector 란? Function Selector는 함수가 호출 됐을 때 EVM에서 호출된 함수가 어떤 함수인지 판단하고 그 함수를 실행시키는 역할을 합니다. 아래 BasicToken 컨트랙트 코드가 존재합니다. remix에서 totalSupply 메소드를 호출해보면 calldata로 0x18160ddd 가 들어간 것을 볼 수 있습니다. 여기서 0x18160ddd는 function signature 라고 불리는데요...
uint8, uint32, uint256 등 해당 타입들은 최대 저장될 수 있는 비트의 수가 존재합니다. uint8 balance = 255;만약 위 balance 변수에 1을 더하게 된다면 어떻게 될까요? balance를 2진수로 표현하면 11111111 입니다. 여기서 1을 더하게 되면 비트의 수가 초과 되어 balance의 2진수 값은 00000000, 즉 0이 됩니다. 이것은 마치 오래된 차의 주행계가 최대 측정할 수 있는 주행거리를 넘어가게 되면 다시 0이 되는것과 비슷합니다. 우리는 이 현상을 overflow라고 부릅니다. uint8 balance = 0;그러면 반대로 위 balance 변수에 1을 뺀다면 어떤 값이 나올까요? uint는 unsigned int의 약자 즉 부호가 없기 때문에 양..
컨트랙트가 이더리움을 받기 위해서는 fallback 혹은 receive 함수가 있어야 합니다. 만약에 존재하지 않는다면 EVM 에서 에러를 던져 해당 트랜젝션을 revert 시킬 것 입니다. 그럼에도 불구하고 강제로 이더를 넣는 2가지 방법이 존재합니다. 저는 이 2가지 방법에 대해서 소개해 드릴려고 합니다. 혹시 이 글에 틀린 내용 혹은 추가 설명해야 할 내용이 있다면 댓글 부탁드리겠습니다 ! 1. selfdestruct 메소드 사용 selfdestruct 블록체인 내에 존재하는 해당 컨트랙트의 데이터들을 지워주는 메소드입니다. 이 때 컨트랙트에 이더리움이 있는경우 해당 컨트랙트가 지워지면 이더가 영구적으로 손실이 될 수 있습니다. 그런 실수가 벌어지지 않도록 이 메소드는 주소를 파라미터를 받고 그 주..