분류 전체보기
-
[solidity] 예외처리 방법들 require, revert, assertsolidity 2023. 3. 25. 15:14
보통의 경우 예외처리를 필요로 하는경우에 require 만으로도 대부분 충분하다. 그래서 다른 방법들에 대해서 놓치기 쉽다 같은용도의 문법이 여러개인것은 다양한 경우속에서 고려되어야 하면서 동시에 중요한 부분이기도 한 케이스 들이 많기 때문에 자주 사용하지 않더라도 그부분을 잘 숙지 하고 있어야 한다. 1. 검증 2. 메시지 위 3가지 요소로 나눠서 숙지해 놓으면 편한거 같다. require(!_blacklist[msg.sender],"blacklist"); require의 경우 첫번째 인자의 결과값이 true false 인지 검증 이후에 false 값일 경우 에러메시지를 반환시킬수 있고 이후에 모든 실행을 롤백한다. if(_blacklist[msg.sender]){ revert("blacklist");..
-
[solidity] 컨트랙트에서 이더전송시 알아둬야 할 사항들에 관하여 call, send, transfer, receive(), fallback(), payablesolidity 2023. 3. 22. 15:20
이더를 전송하고 받는 부분에 있어서 다양한 함수가 있다. 한가지 동작을 하는데 다양한 방법이 있다라는것은 그만큼 다양한 상황속에서 고려될수 있는 사항이 있다라는 점이고 주요하게 다뤄줘야 하는 부분이라는 이야기다. 근데 보통 사용하는 방법만 항상 사용하는 경향이 있기 때문에 다른 방법들은 놓치기 쉽다. 그래서 정리를 한번 해보고자 작성하는 글이다. 일단 이더를 보낼때와 받는때로 구분해서 살펴보고자 한다 보낼때 : call, send, transfer 받을때 : payable, receive(), fallback() 보낼때 보내는 부분역할을 할수 있는 간단한 Bank1 컨트랙트이다. deposit을 하게 되면 컨트랙트에 예치가 되고 withdraw 를 통해 컨트랙트내의 이더중 나의 예치량 만큼 송금할수 있는..
-
[solidity] datalocation 에 대한 정리 calldata, memory, storagesolidity 2023. 3. 22. 00:33
data-type 에는 두가지로 나눌수 있다. 1. primitive type 2. reference type 기준은 데이터 크기가 유동적인지 아닌지에 따라서 구분하면 되고 이부분은 다른 언어와 크게 다를건 없다. string, bytes, mapping, array, structs 가 reference type 으로 나눌수 있고 크게 나누면 mapping, array, structs 로만 나눌수 있다. string, bytes 의 경우 special array로 array의 일부라고 볼수있다. reference type의 경우 선언시에 dataLocation 을 명시 해줘야 하는데 엄밀히 이야기 하면 함수 안에서 선언시에 명시 해줘야 한다는 이야기다 함수 외부인 경우에는 기본적으로 dataLocatio..
-
[blockchain] 이더리움 트랜잭션에 대하여블록체인 2023. 3. 20. 23:37
비트코인에서 트랜잭션이란 송금을 이야기한다. 체인에 저장하는 정보가 거래로만 한정되어 있기 때문이다. 이더리움은 이더송금 이외에도 스마트컨트랙트 생성이나 스마트컨트랙트 함수 호출과 같은 트랜잭션이 있다. 따라서 이더리움에서의 트랜잭션은 evm의 상태변경과 컨트랙트 실행할수 있는 유일한 방법이라는 것에 의미가있다. 트랜잭션 구조 트랜잭션은 블록체인에 저장할 데이터들의 시리얼라이즈된 바이너리 메시지 이다. 그럼 어떤 데이터들이 시리얼라이즈 되어있는지 살펴보자. - 논스 : 1. 주소당 tx건수를 나타내며 해당값은 블록체인 계정상태에 저장되어 있지는 않고 동적으로 계산된다.(getTransactionCount) 2. 트랜잭션 복제방지의 기능을 할수있다. 3. 트랜잭션 순서보장. (nonce가 10인 tx는 n..
-
[solidity] UniswapV3PoolDeployer 컨트랙트와 return variable(반환변수), new 컨트랙트 생성에 대해 알아보기solidity 2023. 2. 21. 00:56
이전글까지 uniswap v3-core의 factory 컨트랙트와 solidity 문법을 같이 봤었다 오늘은 pool 컨트랙트를 보려고 했는데 그전에 factory 컨트랙트의 createpool 함수와 pooldeployer 컨트랙트를 보고 넘어가면 좋을거 같기도 하고 문법적으로 처음 보는 부분도 있어서 한번더 보고 넘어가려고 한다. 참고로 v2 까지는 pool 컨트랙트의 역할은 pair 컨트랙트에서 사용됬는데 이름이 바뀐부분인거같다. contract UniswapV3PoolDeployer is IUniswapV3PoolDeployer { struct Parameters { address factory; address token0; address token1; uint24 fee; int24 tickSp..
-
[solidity] UniSwapV3Factory 컨트랙트로 event에 대해 알아보기solidity 2023. 2. 19. 12:30
유니스왑 코드를 보다가 solidity 에서 indexed 키워드 역할이 궁금해서 찾아보고 실습해보는 목적의 글이다. interface IUniswapV3Factory { event OwnerChanged(address indexed oldOwner, address indexed newOwner); event PoolCreated( address indexed token0, address indexed token1, uint24 indexed fee, int24 tickSpacing, address pool ); event FeeAmountEnabled(uint24 indexed fee, int24 indexed tickSpacing); function owner() external view return..
-
[solidity] UniswapV3Factory 컨트랙트로 interface, abstract contract 살펴보기solidity 2023. 2. 14. 22:26
contract UniswapV3Factory is IUniswapV3Factory, UniswapV3PoolDeployer, NoDelegateCall { address public override owner; mapping(uint24 => int24) public override feeAmountTickSpacing; mapping(address => mapping(address => mapping(uint24 => address))) public override getPool; constructor() {...생략} function createPool( address tokenA, address tokenB, uint24 fee ) external override noDelegateCall ret..
-
[solidity] NoDelegateCall 컨트랙트와 immutable, constant 키워드에 대하여solidity 2023. 2. 13. 22:29
abstract contract NoDelegateCall { address private immutable original; constructor() { original = address(this); } function checkNotDelegateCall() private view { require(address(this) == original); } modifier noDelegateCall() { checkNotDelegateCall(); _; } } 위 코드는 유니스왑v3의 NodelegateCall 컨트랙트이다. 살펴보면 이름그대로 delegatecall 을 막는용도의 컨트랙트 이고 주석에도 /// @notice Base contract that provides a modifier for pr..