xDeFi Labs: 이더리움 가스의 모든 측면
보조 제목
1. 이더리움 블록체인 Gas의 소비 논리: GasPrice 및 GasLimit
ETH 블록체인 시스템에서 어떤 종류의 작업을 수행하든 gasPrice와 gaslimit는 반드시 지불해야 하는 가격이며 운영 시 반드시 이해해야 합니다.
gasPrice의 단위는 종종 gwei입니다. 왜냐하면 1wei = 10^-18 eth가 eth의 가장 작은 고유 단위이기 때문입니다. 1gwei = 10^9wei = 10^-9eth, 이는 블록에서 패키지된 트랜잭션 리소스를 놓고 경쟁할 때마다 eth에서 운영하려는 모든 사람들이 얻은 값입니다. 그것은 포장할 수 없습니다.
Eth의 블록은 2017년 말 1CO 매니아와 2020년 초 312 폭락 기간 동안 두 번의 임시 "풀 블록"을 경험했습니다. 사용자가 많고 시세가 너무 낮아서 패키징 할 수 없습니다.일정 시간이 지나면 트랜잭션이 실패했지만 2019년 ERC-20USDT의 광범위한 사용과 2020년의 Uniswap의 광범위한 사용으로 인해 정상적인 전체 블록으로 이어졌습니다. (총 가스 소비 gasLimit가 블록이 감당할 수 있는 12,500,000을 초과합니다.
보조 제목
2. Solidity 프로그래밍 계산 수준에서 낮은 Gas를 보장하는 방법
Solidity의 작성 스타일은 약간 자바스크립트와 비슷하며 특정 실행 수준은 EVM 실행 가능 opcode로 컴파일하는 데 따라 다릅니다. 가스를 절약하기 위해 어떤 종류의 opcode로 컴파일되는지에 관계없이 적어도 Solidity 수준에서는 가능한 한 많은 가스를 절약할 수 있는 기회를 찾을 수 있습니다.
정수 컴퓨팅 사고
Solidity에는 IEEE-754에서 정의한 부동 소수점 숫자가 없습니다: 이러한 종류의 부동 소수점 숫자 계산은 원래 CPU 레지스터 설계를 안내했습니다. 그리고 정수를 사용하여 소수점을 먼저 시뮬레이트한 다음 부동 소수점 숫자의 동작을 시뮬레이트하지만 전반적으로 프로그래머는 정수 사고를 해야 합니다.
편리한 수학 라이브러리가 있다고 가정하면 a.div(2)가 실제로 a>>1만큼 빠르지 않다는 것을 알게 될 것입니다. 왜냐하면 수학 라이브러리의 곱셈과 나눗셈은 여전히 덜 비싼 연산을 호출하여 수행되기 때문입니다.
다행스럽게도 eth 개발의 선구자(예: openzeppelin, gnosis, balancer 등)는 프로젝트를 구현하는 과정에서 다른 사람들이 사용할 수 있도록 몇 가지 수학 라이브러리를 생성했습니다. .
다음은 네 가지 작업 이외의 계산 체계에 대한 좋은 소개입니다.웹 링크
B 계산 복잡성을 알지 못하는 한 루프를 피하십시오.
for 루프의 두 번째 조건이 비어 있거나 while 문이 조건이 참이라고 판단하는 경우와 같이 루프 조건이 열려 있는 경우 루프 본문에서 계산의 가스 소비량을 예측하지 못하기 쉽습니다. 가스 소비를 허용할 수 없게 만들거나 Metamask(및 기타 도구)가 gasLimit를 올바르게 추정할 수 없어 eth 계약 호출이 실패합니다.
또한 솔리디티 계약 작성에 특히 익숙한 과학자들이 수학에 약간의 노력을 기울일 수 있다면 수학 라이브러리를 이해하는 데 도움이 될 뿐만 아니라 코드 가스를 단순화하는 데 도움이 되는 "Hacker's Delight"를 참조하는 것이 좋습니다. 소비. 예를 들어, 컴퓨터 개발 과정에서 Thor 3 알고리즘을 Newton의 방법에 적용하는 것을 보았습니다.웹 링크이 알고리즘은 여전히 IEEE-754 표준 부동 소수점 숫자에만 유효하지만 견고하게는 다음과 같이 매우 작은 손실이 있는 알고리즘으로 폭력적인 계산을 줄이는 전문 알고리즘 최적화 프로그램이 항상 있었습니다.보조 제목
~에 따르면
~에 따르면웹 링크단서가 주어지면 Ethereum Yellow Paper는 자세한 수수료 내역을 제공합니다.
이 기사에서는 Gtxdatazero와 Gtxdatanonzero의 비용 차이에 대해 언급합니다.이 핵심 차이점의 논리는 다음과 같습니다: eth 주소에 00이 더 많음(0이 쌍으로 표시됨) 주소가 계약인지 일반인이 전송하는지에 관계없이 전송 -아웃 주소는 가스비의 0.4-5% 정도를 절약할 수 있습니다.
또한 EVM에서 다양한 연산에 해당하는 연산 코드를 참고하여 high-gas 연산을 최대한 피하고 low-gas 연산을 사용하여 솔리디티 코드를 구축할 수도 있습니다.
일반인의 경우 0x00으로 시작하는 주소를 갖는 것은 매우 쉽고 가장 실용적인 도구 중 하나는웹 링크보조 제목
4. GasToken 제품군: 또 다른 실제 작업
이것은 파괴를 위해 환불 가능한 가스를 만드는 실제 사례입니다.
GST와 GST2는 Gsclear와 Gssuicide의 환급 가스비의 특성에 착안하여 일부 연구자에 의해 설정되었는데, 그 중 GST는 보관 해제(Gsclear의 환급)를 기준으로 하고 GST2는 해제 계약(Gssuicide)을 기준으로 합니다. GST2 2세대가 더 합리적이지만 기술 개발 과정에서 실제로 GST2가 GST보다 항상 이점이 있는 것은 아닙니다. 상태 저장소의 최적화가 ETH 1.x 기술 경로에 나타나면 GST도 부흥을 일으키다.
1inch CHI gastoken은 GST2를 기반으로 하며, 토큰 주소에 포함된 00의 개수는 증가하지만 1inch의 보다 활발한 상업 활동으로 인해 이 운영은 점차 널리 알려지고 있습니다.
보조 제목
5. xDeFi&Labs가 가스를 최적화하는 방법
zksnarks layer2 솔루션의 감사 비용 수백만 달러를 고려하여 xDeFi&Labs 팀은 일시적으로 제품 로직을 먼저 검증하기로 결정했습니다.
제품 최적화 과정에서 사용자의 거래는 이미 a**b의 논리를 포함하고 있습니다. 여기서 b는 uint256으로 표시되는 십진수이며 변장한 십진수 역할을 합니다. 금융 상품 설계 과정에서 풀의 균형 설계는 [1,49]에서 {1,2,3,4,6,8,12} 사이의 소수점에서 b의 값을 빠르게 줄일 수 있습니다. 가스 비용을 수천에서 수만까지 절약할 수 있는 양의 정수. 수학 라이브러리를 호출할 때 Balancer 수학 라이브러리 bpow의 소수 부분은 실제로 호출되지 않고 bpowi만 호출됩니다.
XDEX의 토큰 발행 과정에서 xDeFi&Labs는 3장에서 언급한 방법에 따라 자체 0x00 주소의 경쟁력을 보장했습니다(현재 TokenLon에서 사용하는 11개의 0인 ETH2를 초과하는 12개의 0이 현재 유일하게 실행 가능한 솔루션으로 계산됩니다. 지불 주소 0의 0 8개와 GST2의 0 6개는 1inch CHI의 0 12개와 일치합니다.
xHalfLife의 설계 과정에서 수익 사용자가 베스팅 계정에서 인출할 수 있는 금액을 확인하기 위해 원래 버전은 순환 계산 방법을 사용하며 사이클 수는 극단적인 경우 블록 높이 차이를 포함합니다. 우리는 일주일이 수천에서 수만 블록 높이 차이를 커버한다는 것을 알 수 있습니다 각 루프 바디가 수백 개의 가스를 소비한다면 사용자가 돈을 인출할 때 단일 계약은 수천만 개의 가스 소비를 유발합니다 분명히 용납할 수 없습니다(아마도 수백 따라서 fundStream, BalanceOf, Withdraw 3가지 함수에서 루프를 제거하고 **b 단순화 방식을 계속 사용합니다. github 코드 주석의 루프 코드. 호출할 때 사용자의 경험을 고려하면(Sushi의 수입은 모든 블록마다 점프하고 xHalfLife 코드의 첫 번째 버전은 이를 수행하지 못할 수 있음) b가 소수일 가능성이 있습니다.


