From 409be2442a5b6e97a7a545c189a3620f4fb04ba4 Mon Sep 17 00:00:00 2001 From: siddharth0a Date: Sun, 31 Mar 2024 22:55:48 +0900 Subject: [PATCH] consensus/misc: eip-1559 comment --- consensus/misc/eip1559/eip1559.go | 12 +++++++++++- consensus/misc/gaslimit.go | 2 ++ params/config.go | 7 +++++++ params/protocol_params.go | 8 +++++--- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/consensus/misc/eip1559/eip1559.go b/consensus/misc/eip1559/eip1559.go index 84b82c4c49..1bb093aa07 100644 --- a/consensus/misc/eip1559/eip1559.go +++ b/consensus/misc/eip1559/eip1559.go @@ -31,8 +31,10 @@ import ( // VerifyEIP1559Header verifies some header attributes which were changed in EIP-1559, // - gas limit check // - basefee check +// VerifyEIP1559Header 함수는 EIP-1559이후 변경된 헤더 속성을 검증한다 func VerifyEIP1559Header(config *params.ChainConfig, parent, header *types.Header) error { // Verify that the gas limit remains within allowed bounds + // gas limit이 허용된 범위 안에 있는지 검증한다 parentGasLimit := parent.GasLimit if !config.IsLondon(parent.Number) { parentGasLimit = parent.GasLimit * config.ElasticityMultiplier() @@ -41,10 +43,12 @@ func VerifyEIP1559Header(config *params.ChainConfig, parent, header *types.Heade return err } // Verify the header is not malformed + // 헤더가 잘못된 형식이 아닌지 확인한다(baseFee) if header.BaseFee == nil { return errors.New("header is missing baseFee") } // Verify the baseFee is correct based on the parent header. + // baseFee가 parent header에 근거해 올바른지 확인한다. expectedBaseFee := CalcBaseFee(config, parent) if header.BaseFee.Cmp(expectedBaseFee) != 0 { return fmt.Errorf("invalid baseFee: have %s, want %s, parentBaseFee %s, parentGasUsed %d", @@ -54,14 +58,18 @@ func VerifyEIP1559Header(config *params.ChainConfig, parent, header *types.Heade } // CalcBaseFee calculates the basefee of the header. +// CalcBaseFee는 header의 basefee를 계산한다. func CalcBaseFee(config *params.ChainConfig, parent *types.Header) *big.Int { // If the current block is the first EIP-1559 block, return the InitialBaseFee. + // 현재 블록이 EIP-1559의 첫번째 블록이면, InitialBaseFee를 반환한다. + // -----런던인지 검사하는데 첫번째 블록과 어떤 관련성 있는지? if !config.IsLondon(parent.Number) { return new(big.Int).SetUint64(params.InitialBaseFee) } parentGasTarget := parent.GasLimit / config.ElasticityMultiplier() // If the parent gasUsed is the same as the target, the baseFee remains unchanged. + // 부모블록의 gasUsed가 target과 같으면, baseFee는 변경되지 않음. if parent.GasUsed == parentGasTarget { return new(big.Int).Set(parent.BaseFee) } @@ -74,6 +82,7 @@ func CalcBaseFee(config *params.ChainConfig, parent *types.Header) *big.Int { if parent.GasUsed > parentGasTarget { // If the parent block used more gas than its target, the baseFee should increase. // max(1, parentBaseFee * gasUsedDelta / parentGasTarget / baseFeeChangeDenominator) + // 만약 부모 블록이 타겟보다 많은 gas를 사용했으면, baseFee는 증가한다. num.SetUint64(parent.GasUsed - parentGasTarget) num.Mul(num, parent.BaseFee) num.Div(num, denom.SetUint64(parentGasTarget)) @@ -84,12 +93,13 @@ func CalcBaseFee(config *params.ChainConfig, parent *types.Header) *big.Int { } else { // Otherwise if the parent block used less gas than its target, the baseFee should decrease. // max(0, parentBaseFee * gasUsedDelta / parentGasTarget / baseFeeChangeDenominator) + // 만약 부모 블록이 타겟보다 적은 gas를 사용했으면, baseFee는 감소한다. num.SetUint64(parentGasTarget - parent.GasUsed) num.Mul(num, parent.BaseFee) num.Div(num, denom.SetUint64(parentGasTarget)) num.Div(num, denom.SetUint64(config.BaseFeeChangeDenominator())) baseFee := num.Sub(parent.BaseFee, num) - + // 코드가 위 로직이랑 일관되지 않은데 개선사항? return math.BigMax(baseFee, common.Big0) } } diff --git a/consensus/misc/gaslimit.go b/consensus/misc/gaslimit.go index dfcabd9a80..501479edaa 100644 --- a/consensus/misc/gaslimit.go +++ b/consensus/misc/gaslimit.go @@ -24,8 +24,10 @@ import ( // VerifyGaslimit verifies the header gas limit according increase/decrease // in relation to the parent gas limit. +// VerifyGaslimit은 header gas limit관 parentgas limit의 증가/감소관계를 확인한다. func VerifyGaslimit(parentGasLimit, headerGasLimit uint64) error { // Verify that the gas limit remains within allowed bounds + // gas limit이 허용된 범위안에 있는지 확인한다 diff := int64(parentGasLimit) - int64(headerGasLimit) if diff < 0 { diff *= -1 diff --git a/params/config.go b/params/config.go index 439e882189..7683b147e2 100644 --- a/params/config.go +++ b/params/config.go @@ -319,12 +319,16 @@ var NetworkNames = map[string]string{ } // ChainConfig is the core config which determines the blockchain settings. +// ChainConfig는 블록체인 설정을 결정하는 핵심 config이다. // // ChainConfig is stored in the database on a per block basis. This means // that any network, identified by its genesis block, can have its own // set of configuration options. +// ChainConfig는 블록 단위로 데이터베이스에 저장된다. +// 이는 제네시스 블록에 의해 구별되는 모든 네트워크는 고유의 configuration option set를 가질 수 있음을 의미한다. type ChainConfig struct { ChainID *big.Int `json:"chainId"` // chainId identifies the current chain and is used for replay protection + // chainId는 현재 체인을 식별하고 replay attack의 protection에 사용된다 HomesteadBlock *big.Int `json:"homesteadBlock,omitempty"` // Homestead switch block (nil = no fork, 0 = already homestead) @@ -539,6 +543,7 @@ func (c *ChainConfig) IsBerlin(num *big.Int) bool { } // IsLondon returns whether num is either equal to the London fork block or greater. +// IsLondon는 num이 London fork block보다 크거나 같은지 여부를 반환한다. func (c *ChainConfig) IsLondon(num *big.Int) bool { return isBlockForked(c.LondonBlock, num) } @@ -746,11 +751,13 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, headNumber *big.Int, } // BaseFeeChangeDenominator bounds the amount the base fee can change between blocks. +// BaseFeeChangeDenominator는 블록간 base fee가 변할 수 있는 양을 제한한다. func (c *ChainConfig) BaseFeeChangeDenominator() uint64 { return DefaultBaseFeeChangeDenominator } // ElasticityMultiplier bounds the maximum gas limit an EIP-1559 block may have. +// ElasticityMultiplier는 EIP-1559 블록이 가지는 최대 gas limit을 제한한다 func (c *ChainConfig) ElasticityMultiplier() uint64 { return DefaultElasticityMultiplier } diff --git a/params/protocol_params.go b/params/protocol_params.go index 4e01b80970..d45af37433 100644 --- a/params/protocol_params.go +++ b/params/protocol_params.go @@ -124,9 +124,11 @@ const ( // Introduced in Tangerine Whistle (Eip 150) CreateBySelfdestructGas uint64 = 25000 - DefaultBaseFeeChangeDenominator = 8 // Bounds the amount the base fee can change between blocks. - DefaultElasticityMultiplier = 2 // Bounds the maximum gas limit an EIP-1559 block may have. - InitialBaseFee = 1000000000 // Initial base fee for EIP-1559 blocks. + DefaultBaseFeeChangeDenominator = 8 // Bounds the amount the base fee can change between blocks. + // 블록 간 변화하는 base fee 양 제한 + DefaultElasticityMultiplier = 2 // Bounds the maximum gas limit an EIP-1559 block may have. + // EIP-1559블록의 최대 gas limit 범위 + InitialBaseFee = 1000000000 // Initial base fee for EIP-1559 blocks. MaxCodeSize = 24576 // Maximum bytecode to permit for a contract MaxInitCodeSize = 2 * MaxCodeSize // Maximum initcode to permit in a creation transaction and create instructions