본문 바로가기

솔리디티12

delegatecall : immutable, constant 예제 이뮤터블, 콘스탄트 들이 어떻게 작동하는지 딜리게이트콜을 아래 테스트를 사용해 알아보자. DelegateCalled.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract DelegateCalled { uint256 public constant CONSTANTVALUES = 400; uint256 public publicValue1 = 600; uint256 public immutable immutableValue = 200; uint256 public publicValue2 = 800; constructor() { } function getValues() external view returns (uint256, uint256, uint.. 2024. 2. 3.
openzzeplin 5V => upgrade contract 분석하기 오랜만에 블로그다. 이직을 해서 정신없이 프로젝트를 쳐내다가 정리를 해가며 해야할거 같아서 오랜만에 글을 써내려가겠다. 현재 내가 분석중인것은 업그레이더블 컨트랙트이다. 함수호출로 업그레이드 하는 방법을 분석중인데 그전에 하드햇에서 지원하는 라이브러리가 있어 그것을 파해쳐보겠다. 우선 transparent 패턴을 분석중이라 그것 부터 정리를 한다. 분석해보니 하드햇에서 지원하는 방법은 크게 두가지가 있는것 같다. 1. 프록시 컨트랙트 없이 라이브러리로 업그레이드 진행. 2. 내가 원하는 특정 프록시 컨트랙트 패턴을 이용한 업그레이드 진행. 2번 부터 정리한다. 필요 컨트렉트 1. v1 logic contract 2. v2 logic contract 끝! 배포 및 업그레이드 방법 전체적인 로직은 제일 마지.. 2024. 1. 20.
업그레이더블 컨트랙트 정리 업그레이더블 컨트랙트란 컨트랙트는 본래 수정할수 없다. 하지만 프록시 패턴을 사용해서 교묘하게 속임수를 쓸 수 있다. 프록시 서버를 예로 들자면 진짜 서버는 따로 있고 중간에서 연결해주는 역할을 해주는 프록시 서버의 특성을 띈다고 할 수 있겠다. 이게 가능 한 이유는 Delegatecall 때문이다. 솔리디티는 다른 컨트랙트를 호출 할때 크게 두가지 EVM opcode를 사용한다. call, delegatecall call은 다 아니 생략하고 delegatecall은 다른 컨트랙트의 코드를 사용하지만 실행 환경은 기존 컨트랙트에서 수행하게끔한다. a 컨트랙트가 b 컨트랙을 호출할때 delegatecall을 사용하면 b contract의 code를 사용하지만 스토리지는 a 컨트랙을 소모한다. 그래서 스토리.. 2023. 7. 19.
ERC-4337 , Account Abstraction ERC-4337 , Account Abstraction 주요 개념 UserOperation 객체 도입 : 기존의 트랜잭션 구조와 다른 새로운 객체 유형, 사용자 작업 개체는 스마트 게약을 사용하여 처리되며 이를 통해 트랜잭션 처리 방식에 대한 유연성이 향상된다. 별도의 메모리 풀 : useroperation 객체는 일반 트랜잭션과 분리되어 별도의 메모리풀에 저장된다. 이를 통해 기존의 트랜잭션 처리에 영향을 주지 않으면서 사용자 작업 객체를 관리가능하다. 번들러 : 번들러는 사용자 작업 객체를 수집하고 이를 처리할수있는 번들로 만들어 주는 역할을 한다. 번들러가 번들을 처리하는 특수 계약을 호출하여 번들 내의 사용자 작업 객체들이 블록에 포함할수 있게 한다. UserOperation struct User.. 2023. 4. 4.
EIP-4337 이해하기 eip 4337은 합의 규칙을수정하지 않고 이더리움 메인넷에 계정 추상화 기능을 추가하기 위한 사양이다. 계정 추상화란 무엇인가? 계정 추상화란 사용자가 eoa 대신 스마트 컨트랙트 지갑을 사용할수 있도록 하는 제안이다. 사용 사례의 예 권한 제어 트랜잭션 일괄 처리 계정 복구 거래 중지 용어 정리 UserOperation 사용자 대신 보낼 트랜잭션을 설명하는 구조, 혼동을 피하기 위해 트랜잭션이라는 이름은 지정 되지 않음 트랜잭션과 마찬가지로 "sender", "to", "calldata", "maxFeePerGas", "maxPriorityFee", "signature", "nonce"가 포함된다 트랜잭션과 달리 아래에 설명된 몇 가지 다른 필드가 포함되어 있다 또한 "nonce" 및 "signatu.. 2023. 3. 22.
call vs delegate call 알아보기 회사 일에 바쁘게 치이다보니 블로그 작성을 할 힘이 남아있지않다 공부한 것도 정리해야되는데 이걸 언제하나 싶다. 시간은 남지만 체력과 정신이 나약하다. 우선 콜과 딜리게이트 콜에 대하여 알아보자 call 기존의 call은 스마트컨트랙트 1 안에있는 콜 함수를 통해 컨트랙트 2의 함수를 부른다고 했을때 컨트랙트 1과 2의 msg.sender가 다르게 된다. poo라는 주체가 컨트랙1을 불렀기 때문에 컨트랙1의 msg.sender는 poo가 되고 컨트랙1이 컨트랙2를 호출했기 때문에 컨트랙 2의 msg.sender는 컨트랙 1 이 된다. 또한 컨트랙 1이 부른 컨트랙2의 함수가 num 이라는 변수의 값을 1 => 3 변경 시 num은 3이 되고 컨트랙 2에 저장이 된다. 요약 컨트랙트 1을 통해 2의 함수 .. 2023. 1. 4.