solidity
-
[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..
-
[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..
-
[solidity] modifier, using for, constructorsolidity 2022. 10. 12. 13:48
modifier = 함수제어자 , 변질시키다 , 함수를 변질시킴 즉 함수에 붙어서 같이씀 _ 랑 같이쓰고 다른 함수에서 사용되어져야함 modifier 의 _ 자리에 사용한 함수가 사용되어짐 using 라이브러리 for 타입 ? 라이브러리의 함수를 어떻게 타입으로 활용한다는 거지 ?? ??? 아 라이브러리 라는게 지정할수 있네 다양한 컨트랙트에서 불러다 쓸쑤있는 함수들을 모아놓을수 있구나 utill 파일 처럼 생각할수 있는 근데 왜 for 타입/ using 라이브러리 for 함수명 이렇게 써야하는게 내상식인데 / using 라이브러리 for 타입 이렇게 쓰는지는 나중에 써봐야 알겠는데 constructor : 컨트랙트 배포시에 호출됨 , 컨트랙트당 하나만 가능, 상속가능