블록체인/이더리움 (23) 썸네일형 리스트형 트랜잭션의 유효성 트랜잭션이 실행되기 전에 노드는 트랜잭션이 5개의 룰을 통과하는지 검증하며 하나라도 통과하지 못한다면 트랜잭션은 실행되지 않습니다. 1. 트랜잭션은 RLP로 만들어져야 한다. 2. 트랜잭션의 서명이 유효해야 한다. 3. 트랜잭션의 nonce가 sender의 nonce와 일치해야 한다. 4. 트랜잭션의 비용이 gas limit보다 낮아야 한다. 5. sender의 account balance가 트랜잭션을 실행시키는 금액보다 크거나 같아야 한다. 이 5가지 룰에는 포함되지 않지만 한 가지 규칙이 더 있는데 해당 트랜잭션이 블록에 포함되었을 때 트랜잭션들의 total gas limit이 블록의 gas limit을 초과한다면 해당 트랜잭션을 블록에 포함시켜서는 안 됩니다. 1. 트랜잭션은 RLP로 만들어져야 한.. [Hardhat] Invalid hex string ... 에러 하드햇으로 테스트 넷에서 테스트 스크립트를 실행하려 하는데 계속 invalid hex...라는 문구의 에러가 계속 발생 Error: invalid hex string (argument="value", value="-0x02b4a8", code=INVALID_ARGUMENT, 해결 hardhat.config.js 에서 gas 값을 올려주었더니 해결 bsctest: { url: process.env.BSC_TEST || "", chainId: 97, gas : 2100000, //값을 올려서 실행 gasPrice: 20000000000, accounts:{mnemonic: process.env.MNEMONIC} } Re-Entrancy Attack Re-Entrancy Attack? 재진입 공격(Re-Entrancy Attack)이란 재귀적인 방법을 통해 컨트랙트에서 자금을 빼내는 방법이다. 간단하게 작성된 자금을 출금하는 함수가 있는 컨트랙트 A와 re-entrancy 공격을 실행하는 컨트랙트 B가 다음과 같이 작성되어 있다. pragma solidity ^0.8.7; contract A { mapping(address => uint256) balances; . . . function withdraw() public{ msg.sender.call{value :balances[msg.sender]}(""); balances[msg.sender] = 0; } } contract B { A a; constructor(address _a) { a = A.. 머클트리 블록체인에서 사용되는 머클트리에 대해 알아보겠습니다. 머클트리란? 머클트리는 간단히 말해서 트랜잭션을 해싱해서 이진트리의 형태로 나타낸 것입니다. 1979년 머클트리를 개발한 랄프 머클(Ralph Merkle)의 이름을 따서 머클트리라고 부르며 해시트리(Hash Tree), 혹은 이진트리(Binary Tree)라고도 합니다. 먼저 위와 같이 일련의 트랜잭션들이 존재한다고 가정하겠습니다. 일련의 트랜잭션들을 해시 함수를 이용해 암호화합니다. 해시함수로 나온 결과물들은 다시 2개씩 합쳐서 4개의 결과물을 만들어냅니다. 이 과정을 반복해서 나온 마지막 1개의 노드를 머클 루트 or 루트 해시라고 부르며 머클루트는 블록의 헤더에 저장됩니다. 위의 과정은 하나의 블록이 생성되는 과정에서 일어납니다. 이제 트랜잭션.. 업그레이드 가능한 컨트랙트 작성해보기 이전에 작성했던 프록시 패턴을 실습해보도록 하겠습니다. https://dev-dean-k.tistory.com/86 [Solidity] 프록시 패턴(Proxy Pattern) 스마트 컨트랙트의 가장 큰 특징은 한번 배포되면 컨트랙트 코드의 수정이 불가하다는 것입니다. 그렇기 때문에 배포 전에 엄격한 테스트가 필요하며 만약 그랬다고 하더라도 예기치 못한 수정 dev-dean-k.tistory.com 먼저 필요한 패키지를 설치합니다. npm install @openzeppelin/contracts npm install --save-dev @openzeppelin/hardhat-upgrades 하드햇에서 2개의 컨트랙트 Box와 수정 버전인 BoxV2를 작성합니다. Box //SPDX-License-Ident.. 솔리디티 프록시 패턴(Proxy Pattern) 스마트 컨트랙트의 가장 큰 특징은 한번 배포되면 컨트랙트 코드의 수정이 불가하다는 것입니다. 그렇기 때문에 배포 전에 엄격한 테스트가 필요하며 만약 그랬다고 하더라도 예기치 못한 수정사항이 발생할 수 있습니다. 이러한 경우 프록시 패턴을 이용하면 프로그램을 업데이트한 것처럼 상태 변수 값을 보존하면서 컨트랙트의 로직을 수정할 수 있습니다. 프록시 패턴 앞서 상태 변수의 값을 보존하면서 로직을 수정할 수 있다는 이유는 위와 같이 프록시 컨트랙트에 상태 변수의 값을 저장하고 로직 컨트랙트에는 수행할 로직만을 작성하기 때문에 상태 변수의 값을 보존할 수 있습니다. 다음은 Open Zeppelin에서 제공하는 프록시 패턴의 구조입니다. 사용자는 프록시 컨트랙트에 요청을 보내면 프록시 컨트랙트는 delegatec.. IPFS? IPFS IPFS는 "InterPlanetary File System"의 약자로 기존의 HTTP의 문제점을 해결하기 위한 대안으로 분산형 파일 시스템에 데이터를 저장하고 인터넷으로 공유하기 위한 프로토콜이다. 콘텐츠를 중앙화 된 서버에 저장하는 방식과 달리 분산형 노드에 저장한 후 쉽게 접근할 수 있는 경로를 제공해 NFT 이미지를 업로드하는데에 많이 사용되고 있다. 기존 HTTP의 문제점 기존의 HTTP의 문제는 다음과 같다. 불안정 중앙화 비효율 불안정 HTTP 프로토콜은 클라이언트가 서버에 요청을 보내면, 서버에서 응답으로 데이터를 보내주는 구조로 되어있다. 따라서 데이터를 가지고 있는 서버가 전원이 끊기거나 일부러 데이터를 전송하지 않는다면 해당 데이터에 접근 할 수 있는 방법이 없다. 중앙화 오.. UTXO(비트코인) vs Account Balance(이더리움) UTXO UTXO란 Unspent Transaction Outputs의 약자로서, 미사용 트랜잭션 출력 값이다. 이것은 비트코인에서 계정의 잔고를 표현하는 방식인데, 사용되지 않은 트랜잭션 출력 값들의 합이 비트코인의 잔고이다. 예시 A의 비트코인 계정의 잔고가 5개가 있다는 것을 표현하기 위해서 비트코인은 다음과 같이 처리한다. B와 C가 각각 A에게 2비트, 3비트를 전송한다. 비트를 받은 A는 2개, 3개로 나누어진 UTXO 2개를 가지고 있게 된다. 만약 A가 C에게 비트 1개를 전송한다면 1개 이상을 가지고 있는 UTXO 중 한 개가 파기되고 비트 1개가 들어있는 UTXO가 생성된다. 장점 이중 지불 방지 트랜잭션이 발생하면 UTXO는 검증받은 후 TX Pool에 들어간다. 이중 지불이 발생하면.. 이전 1 2 3 다음