HardFork.go

package patch

import (
	"saseul/config"
	"saseul/data"
	"saseul/model"
)

type HardFork struct{}

func (hf *HardFork) ResourceCondition(block model.ResourceBlock) bool {
	if config.Network == "SASEUL PUBLIC NETWORK" {
		mainBlock := data.MainChainInstance().Block(block.MainHeight)

		return block.Height <= 83500 && mainBlock.Height > 0
	}

	return false
}

func (hf *HardFork) ResourceConditionA(block model.ResourceBlock) bool {
	if config.Network == "SASEUL PUBLIC NETWORK" {
		// legacy
		return block.Height <= 625000
	}

	return false
}

func (hf *HardFork) Validators(block model.MainBlock) bool {
	if config.Network == "SASEUL PUBLIC NETWORK" {
		// 59779 ~ 59788: Hard fork;
		return block.Height >= 59779 && block.Height <= 59788
	}

	return false
}

func (hf *HardFork) ForkValidators() []string {
	return []string{config.GenesisAddress}
	// return config.ManagerAddresses;
}

func (hf *HardFork) ConfirmedHeight(block model.MainBlock) bool {
	if config.Network == "SASEUL PUBLIC NETWORK" {
		// 40937 ~ 41032: Bug blocks;
		return block.Height >= 40937 && block.Height <= 41032
	}

	return false
}

func (hf *HardFork) ForkHeight(height int) int {
	return height - 65536
}

func (hf *HardFork) MainCondition(block model.MainBlock) bool {
	if config.Network == "SASEUL PUBLIC NETWORK" {
		return block.Height <= 150000
	}

	return false
}

이 코드는 HardFork라는 구조체와 그 메서드를 통해 블록체인 네트워크에서 특정 조건을 검사하고, 하드 포크 관련 기능을 수행하는 방법을 정의한 것입니다. 비전공자도 이해할 수 있도록 각 부분을 설명하겠습니다.

개요

HardFork 구조체는 블록체인 네트워크에서 특정 조건이 충족될 때 하드 포크를 관리하는 기능을 제공합니다. 하드 포크는 블록체인에서 체인의 분리를 의미하며, 이 코드는 특정 조건에 따라 블록을 검사하고, 유효한 검증자를 설정하는 등의 기능을 합니다.

HardFork 구조체

  • HardFork: 하드 포크 관련 기능을 담고 있는 빈 구조체입니다.

ResourceCondition 메서드

이 메서드는 ResourceBlock의 조건을 검사합니다. 네트워크가 "SASEUL PUBLIC NETWORK"일 때, 주어진 블록의 높이가 83500 이하이고, 해당 블록의 메인 블록 높이가 0보다 큰지 확인합니다.

ResourceConditionA 메서드

이 메서드는 ResourceBlock의 또 다른 조건을 검사합니다. 네트워크가 "SASEUL PUBLIC NETWORK"일 때, 주어진 블록의 높이가 625000 이하인지 확인합니다.

Validators 메서드

이 메서드는 MainBlock이 하드 포크 기간에 속하는지 검사합니다. 네트워크가 "SASEUL PUBLIC NETWORK"일 때, 블록의 높이가 59779에서 59788 사이인지 확인합니다.

ForkValidators 메서드

이 메서드는 하드 포크 기간 동안 유효한 검증자 주소를 반환합니다. 여기서는 config.GenesisAddress를 반환합니다.

ConfirmedHeight 메서드

이 메서드는 특정 블록이 문제가 있는지 검사합니다. 네트워크가 "SASEUL PUBLIC NETWORK"일 때, 블록의 높이가 40937에서 41032 사이인지 확인합니다.

ForkHeight 메서드

이 메서드는 주어진 높이에서 65536을 뺀 값을 반환합니다. 하드 포크 시의 블록 높이 조정에 사용됩니다.

MainCondition 메서드

이 메서드는 MainBlock의 조건을 검사합니다. 네트워크가 "SASEUL PUBLIC NETWORK"일 때, 주어진 블록의 높이가 150000 이하인지 확인합니다.

요약

  • HardFork 구조체: 하드 포크 관련 조건을 정의합니다.

  • ResourceCondition 메서드: 특정 블록의 조건을 검사합니다.

  • ResourceConditionA 메서드: 또 다른 블록 조건을 검사합니다.

  • Validators 메서드: 하드 포크 기간 동안 유효한 블록을 검사합니다.

  • ForkValidators 메서드: 하드 포크 동안 유효한 검증자 주소를 반환합니다.

  • ConfirmedHeight 메서드: 특정 블록이 문제가 있는지 검사합니다.

  • ForkHeight 메서드: 블록 높이를 조정합니다.

  • MainCondition 메서드: 특정 블록의 조건을 검사합니다.

이렇게 블록체인 네트워크에서 하드 포크와 관련된 다양한 조건을 정의하고, 이를 기반으로 블록을 검사하는 과정을 이해할 수 있습니다.

Last updated