Uvicorn & Gunicorn
Uvicorn and GunicornUvicorn and Gunicorn are important concepts when developing applications in Python. However, there are many concepts to be aware of in order to fully understand Uvicorn and Gunicorn. The following is a brief summary of the necessary concepts, and the details will be dealt with separately later.Necessary ConceptsStarletteStarlette is a Web application server that can run asynchronously. Starlette runs on top of Uvicorn.FastAPIFastAPI provides many features on top of Starlet...
Gas optimization in Solidity, Ethereum
I’m sorry but my English is terrible. I hope you understand that generously.Recently, I was developing a toy project named Blind Market. It’s a simple P2P trading application using smart contract. I was making a contract using Solidity, and the trade stage proceeded in the order of pending, shipping, and done. The problem was appeared in done phase. The problem was that when I tried to close the transaction by paying the price raised by the seller in msg.value, the following error occurred.Pe...
P2WPKH
P2WPKHP2WPKH란 비트코인 내에서 가장 일반적인 스크립트 형식으로 비트코인 프로토콜에 대한 지불 거래 유형이다. 주소는 1로 시작하는데, 세그윗을 지원하는 새로운 주소 3 또는 bc1로 시작하는 주소보다 훨씬 비싸다. https://mirror.xyz/0xA1d9f681B25C14C1eE7B87f1CF102E73cA3ad4d9/egjhNVklgy_LgZmcTXXAOTBa6ePBqO3Ja9ZSoDIad-8 즉, 비트코인 주소가 1로 시작하면 P2PKH 주소를 사용하고 있는 것이다. 공개키의 간단한 해시이며, 이 해시를 주소로 사용하는 것이다. 이것은 원래 비트코인 주소 형식이었으며 오늘까지도 충실히 작동한다. 레거시 주소는 세그윗과 호환되지 않지만, 여전히 문제없이 P2PKH 주소에서 세그윗 주소로 BTC를 보낼 수 있다. 그러나 레거시 주소 트랜잭션이 더 크기 때문에 P2PKH 주소에서 전송하는 평균 속도는 세그윗 주소에서 전송할 때보다 더 높은 요금이 발생할 수 있다....
<100 subscribers
Uvicorn & Gunicorn
Uvicorn and GunicornUvicorn and Gunicorn are important concepts when developing applications in Python. However, there are many concepts to be aware of in order to fully understand Uvicorn and Gunicorn. The following is a brief summary of the necessary concepts, and the details will be dealt with separately later.Necessary ConceptsStarletteStarlette is a Web application server that can run asynchronously. Starlette runs on top of Uvicorn.FastAPIFastAPI provides many features on top of Starlet...
Gas optimization in Solidity, Ethereum
I’m sorry but my English is terrible. I hope you understand that generously.Recently, I was developing a toy project named Blind Market. It’s a simple P2P trading application using smart contract. I was making a contract using Solidity, and the trade stage proceeded in the order of pending, shipping, and done. The problem was appeared in done phase. The problem was that when I tried to close the transaction by paying the price raised by the seller in msg.value, the following error occurred.Pe...
P2WPKH
P2WPKHP2WPKH란 비트코인 내에서 가장 일반적인 스크립트 형식으로 비트코인 프로토콜에 대한 지불 거래 유형이다. 주소는 1로 시작하는데, 세그윗을 지원하는 새로운 주소 3 또는 bc1로 시작하는 주소보다 훨씬 비싸다. https://mirror.xyz/0xA1d9f681B25C14C1eE7B87f1CF102E73cA3ad4d9/egjhNVklgy_LgZmcTXXAOTBa6ePBqO3Ja9ZSoDIad-8 즉, 비트코인 주소가 1로 시작하면 P2PKH 주소를 사용하고 있는 것이다. 공개키의 간단한 해시이며, 이 해시를 주소로 사용하는 것이다. 이것은 원래 비트코인 주소 형식이었으며 오늘까지도 충실히 작동한다. 레거시 주소는 세그윗과 호환되지 않지만, 여전히 문제없이 P2PKH 주소에서 세그윗 주소로 BTC를 보낼 수 있다. 그러나 레거시 주소 트랜잭션이 더 크기 때문에 P2PKH 주소에서 전송하는 평균 속도는 세그윗 주소에서 전송할 때보다 더 높은 요금이 발생할 수 있다....
Share Dialog
Share Dialog
스마트 컨트랙트를 작성하면, storage, memory등의 데이터를 다루게 된다.
storage같은 경우에는 블록체인 상에 영구적으로 저장이 되는데, 정확하게 어디에 어떻게 저장이 되는 것일까?
다음과 같은 컨트랙트를 예시로 들어보자.
contract StorageContract {
struct Data {
address user;
uint256 amount;
}
mapping (uint256=>Data) mapper;
}
mapper에 있는 data들은 어디에 저장될까?
당연히 블록에 저장된다. 블록체인의 각 블록에는 트랜잭션 목록이 포함되어 있다.
트랜잭션에는 암호화폐 전송이 포함될 수 있지만 스마트 컨트랙트와의 상호 작용도 포함될 수 있다.
트랜잭션이 스마트 컨트랙트와 상호 작용할 때 컨트랙트의 함수를 실행하고 해당 스토리지 데이터를 수정할 수 있다.
이 때 스마트 컨트랙트의 새로운 상태는 블록체인에 저장된다.
그런데 여기서 한 가지 의문이 더 생긴다.
스마트 컨트랙트와 상호 작용할 때 실제로 수행하는 작업은 데이터의 특수 페이로드가 포함된 트랜잭션을 생성하는 것이다.
이 페이로드는 일반적으로 스마트 컨트랙트에 수행할 작업을 알려주는 매개 변수를 포함한 함수 호출이다.
트랜잭션이 블록에 포함되고 블록이 채굴되면 네트워크의 모든 노드는 트랜잭션에서 함수 호출을 실행한다.
여기에는 제공된 매개변수로 컨트랙트의 바이트코드를 실행하는 것이 포함된다.
제공된 페이로드를 이용해서, 바이트코드를 실행한다.
함수가 컨트랙트의 상태를 수정하면(즉, 컨트랙트에 저장된 데이터가 변경됨) 새 상태가 블록체인에 저장된다.
위에서 설명한 것과 동일
이는 컨트랙트 자체의 바이트 코드가 변경된다는 의미는 아니다.
바이트코드는 계약 소스 코드의 컴파일된 버전이며 계약이 배포된 후에도 변경되지 않는다.
대신 변경되는 것은 컨트랙트와 연결된 상태(status)이다.
컨트랙트의 바이트 코드를 프로그램으로, 컨트랙트의 상태를 프로그램이 사용하는 변수로 생각할 수 있다.
컨트랙트와 상호 작용할 때 프로그램 자체(바이트 코드)를 변경하는 것이 아니다.
대신 특정 입력으로 프로그램을 실행하고 이로 인해 변수(상태)가 변경될 수 있다.
컨트랙트의 상태에는 구조체 및 매핑과 같은 복잡한 데이터 유형을 포함하여 함수 본문 외부에서 선언된 모든 변수가 포함된다.
각 컨트랙트의 상태는 Key-value pair의 구조를 가지는 블록체인 상태 트리(머클 트리)의 특정 위치에 저장된다.
컨트랙트와 상호 작용할 때 변경되는 것은 바이트 코드가 아니라 상태 트리의 값이다.
이더리움 블록체인의 각 블록에는 Merkle Tree의 루트 해시가 블록 헤더의 일부로 포함된다.
따라서 상태 트리 자체는 블록체인 내에 직접 저장되지 않는다.
오히려 이더리움 네트워크에 참여하는 각 노드에 의해 별도로 유지 관리된다.
스마트 컨트랙트를 작성하면, storage, memory등의 데이터를 다루게 된다.
storage같은 경우에는 블록체인 상에 영구적으로 저장이 되는데, 정확하게 어디에 어떻게 저장이 되는 것일까?
다음과 같은 컨트랙트를 예시로 들어보자.
contract StorageContract {
struct Data {
address user;
uint256 amount;
}
mapping (uint256=>Data) mapper;
}
mapper에 있는 data들은 어디에 저장될까?
당연히 블록에 저장된다. 블록체인의 각 블록에는 트랜잭션 목록이 포함되어 있다.
트랜잭션에는 암호화폐 전송이 포함될 수 있지만 스마트 컨트랙트와의 상호 작용도 포함될 수 있다.
트랜잭션이 스마트 컨트랙트와 상호 작용할 때 컨트랙트의 함수를 실행하고 해당 스토리지 데이터를 수정할 수 있다.
이 때 스마트 컨트랙트의 새로운 상태는 블록체인에 저장된다.
그런데 여기서 한 가지 의문이 더 생긴다.
스마트 컨트랙트와 상호 작용할 때 실제로 수행하는 작업은 데이터의 특수 페이로드가 포함된 트랜잭션을 생성하는 것이다.
이 페이로드는 일반적으로 스마트 컨트랙트에 수행할 작업을 알려주는 매개 변수를 포함한 함수 호출이다.
트랜잭션이 블록에 포함되고 블록이 채굴되면 네트워크의 모든 노드는 트랜잭션에서 함수 호출을 실행한다.
여기에는 제공된 매개변수로 컨트랙트의 바이트코드를 실행하는 것이 포함된다.
제공된 페이로드를 이용해서, 바이트코드를 실행한다.
함수가 컨트랙트의 상태를 수정하면(즉, 컨트랙트에 저장된 데이터가 변경됨) 새 상태가 블록체인에 저장된다.
위에서 설명한 것과 동일
이는 컨트랙트 자체의 바이트 코드가 변경된다는 의미는 아니다.
바이트코드는 계약 소스 코드의 컴파일된 버전이며 계약이 배포된 후에도 변경되지 않는다.
대신 변경되는 것은 컨트랙트와 연결된 상태(status)이다.
컨트랙트의 바이트 코드를 프로그램으로, 컨트랙트의 상태를 프로그램이 사용하는 변수로 생각할 수 있다.
컨트랙트와 상호 작용할 때 프로그램 자체(바이트 코드)를 변경하는 것이 아니다.
대신 특정 입력으로 프로그램을 실행하고 이로 인해 변수(상태)가 변경될 수 있다.
컨트랙트의 상태에는 구조체 및 매핑과 같은 복잡한 데이터 유형을 포함하여 함수 본문 외부에서 선언된 모든 변수가 포함된다.
각 컨트랙트의 상태는 Key-value pair의 구조를 가지는 블록체인 상태 트리(머클 트리)의 특정 위치에 저장된다.
컨트랙트와 상호 작용할 때 변경되는 것은 바이트 코드가 아니라 상태 트리의 값이다.
이더리움 블록체인의 각 블록에는 Merkle Tree의 루트 해시가 블록 헤더의 일부로 포함된다.
따라서 상태 트리 자체는 블록체인 내에 직접 저장되지 않는다.
오히려 이더리움 네트워크에 참여하는 각 노드에 의해 별도로 유지 관리된다.
No comments yet