From 37c086c5595669491034f44e3d570dc5f32798e4 Mon Sep 17 00:00:00 2001 From: Yoshihito Aso Date: Wed, 10 Jun 2026 09:09:08 +0900 Subject: [PATCH] Rename to ibet-Core --- .github/dependabot.yml | 4 +- BUILDING.md | 19 ------- NOTES.md | 112 ----------------------------------------- README.md | 35 ++++++------- 4 files changed, 20 insertions(+), 150 deletions(-) delete mode 100644 BUILDING.md delete mode 100644 NOTES.md diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 6271a45ab..4995644e5 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,7 +11,7 @@ updates: prefix: "chore(go)" include: "scope" ignore: - # Quorum relies on a forked etcd replacement pinned in go.mod. + # ibet-Core relies on the forked etcd replacement pinned in go.mod. - dependency-name: "github.com/coreos/etcd" groups: all-dependencies: @@ -31,4 +31,4 @@ updates: groups: all-dependencies: patterns: - - "*" \ No newline at end of file + - "*" diff --git a/BUILDING.md b/BUILDING.md deleted file mode 100644 index 0d49b2e6e..000000000 --- a/BUILDING.md +++ /dev/null @@ -1,19 +0,0 @@ -# Building Quorum - -Note: Building Quorum requires both a Go (version 1.9 or later) and a C compiler. You can install them using your favourite package manager. - -Clone the repository and build the source: - -``` -git clone https://github.com/BoostryJP/quorum.git -cd quorum -make all -make test -``` - -Binaries are placed within `./build/bin`, most notably `geth` and `bootnode`. Either add this directory to your `$PATH` or copy those two bins into your PATH: - -```sh -# assumes that /usr/local/bin is in your PATH -cp ./build/bin/geth ./build/bin/bootnode /usr/local/bin/ -``` diff --git a/NOTES.md b/NOTES.md deleted file mode 100644 index e38ff0296..000000000 --- a/NOTES.md +++ /dev/null @@ -1,112 +0,0 @@ -# Hacking on Quorum / various notes - -## How does private state work? - -Original commit from Jeff explains the dual public and private state with INITIAL restrictions: -``` -commit 763f939f4725daa136161868d3b01fa7a84eb71e -Author: Jeffrey Wilcke -Date: Mon Oct 31 12:46:40 2016 +0100 - - core, core/vm: dual state & read only EVM - - This commit implements a dual state approach. The dual state approach - separates public and private state by making the core vm environment - context aware. - - Although not currently implemented it will need to prohibit value - transfers and it must initialise all transactions from accounts on the - public state. This means that sending transactions increments the - account nonce on the public state and contract addresses are derived - from the public state when initialised by a transaction. For obvious - reasons, contract created by private contracts are still derived from - public state. - - This is required in order to have consensus over the public state at all - times as non-private participants would still process the transaction on - the public state even though private payload can not be decrypted. This - means that participants of a private group must do the same in order to - have public consensus. However the creation of the contract and - interaction still occurs on the private state. - - It implements support for the following calling model: - - S: sender, (X): private, X: public, ->: direction, [ ]: read only mode - - 1. S -> A -> B - 2. S -> (A) -> (B) - 3. S -> (A) -> [ B -> C ] - - It does not support - - 1. (S) -> A - 2. (S) -> (A) - 3. S -> (A) -> B - - Implemented "read only" mode for the EVM. Read only mode is checked - during any opcode that could potentially modify the state. If such an - opcode is encountered during "read only", it throws an exception. - - The EVM is flagged "read only" when a private contract calls in to - public state. -``` - - -Some things have changed since, let's look at the EVM structure in some more detail: - -```go -type EVM struct { - ... - // StateDB gives access to the underlying state - StateDB StateDB - // Depth is the current call stack - depth int - ... - - publicState PublicState - privateState PrivateState - states [1027]*state.StateDB - currentStateDepth uint - readOnly bool - readOnlyDepth uint -} -``` - -The vanilla EVM has a call depth limit of 1024. Our `states` parallel the EVM call stack, recording as contracts in the public and private state call back and forth to each other. Note it doesn't have to be a "public -> private -> public -> private" back-and-forth chain. It can be any sequence of { public, private }. - -The interface for calling is this `Push` / `Pop` sequence: - -```go -evm.Push(getDualState(evm, addr)) -defer func() { evm.Pop() }() -// ... do work in the pushed state -``` - -The definitions of `Push` and `Pop` are simple and important enough to duplicate here: - -```go -func (env *EVM) Push(statedb StateDB) { - if env.privateState != statedb { - env.readOnly = true - env.readOnlyDepth = env.currentStateDepth - } - - if castedStateDb, ok := statedb.(*state.StateDB); ok { - env.states[env.currentStateDepth] = castedStateDb - env.currentStateDepth++ - } - - env.StateDB = statedb -} -func (env *EVM) Pop() { - env.currentStateDepth-- - if env.readOnly && env.currentStateDepth == env.readOnlyDepth { - env.readOnly = false - } - env.StateDB = env.states[env.currentStateDepth-1] -} -``` - -Note the invariant that `StateDB` always points to the current state db. - -The other interesting note is read only mode. Any time we call from the private state into the public state (`env.privateState != statedb`), we require anything deeper to be *read only*. Private state transactions can't affect public state, so we throw an EVM exception on any mutating operation (`SELFDESTRUCT, CREATE, SSTORE, LOG0, LOG1, LOG2, LOG3, LOG4`). Question: have any more mutating operations been added? Question: could we not mutate deeper private state? diff --git a/README.md b/README.md index eb8bbf4e8..df01f1490 100644 --- a/README.md +++ b/README.md @@ -2,34 +2,34 @@

-# GoQuorum for ibet Network +# ibet-Core

Version

-This project is [GoQuorum](https://github.com/ConsenSys/quorum) fork for [ibet Network](https://github.com/BoostryJP/ibet-Network) +ibet-Core is a [GoQuorum](https://github.com/ConsenSys/quorum)-derived node client optimized for [ibet Network](https://github.com/BoostryJP/ibet-Network). -## Version control policy +## Overview -This project is a fork of GoQuorum (and go-ethereum), and we decide which version of GoQuorum to adopt when developing each version and reflect those modules. -In addition, it has been modified to be optimal for the ibet Network. +ibet-Core builds on GoQuorum and its go-ethereum foundation while adding changes required to run ibet Network efficiently and securely. +It is an EVM-compatible blockchain node client derived from go-ethereum, inheriting the execution model and tooling ecosystem used by Ethereum clients. +The project adopts a suitable GoQuorum version for each ibet-Core release, then applies ibet Network-specific patches and dependency updates. The version control policy of this project follows that of ibet-Network. -## Reference GoQuorum version +## Features -Currently, the ibet Network is built using a node client based on v24.4.0 of GoQuorum. -However, it has been variously patched to be optimized for ibet Network. For example: +ibet-Core incorporates the final GoQuorum upstream baseline adopted by this project and includes the following ibet Network-focused changes: - The default block generation interval is set to 1 second. -- Fully supports Go 1.25 and applies new 3rd party packages from a security perspective. -- Made temporary fixes for bugs before they were fixed in the original GoQuorum. +- Go 1.25 is supported, with third-party packages updated from a security perspective. +- Temporary fixes are applied for selected issues before they are fixed in the original GoQuorum. - Added precompile for secp256r1 signature verification ([EIP-7951](https://eips.ethereum.org/EIPS/eip-7951)). - Added precompile for BLS12-381 curve operations ([EIP-2537](https://eips.ethereum.org/EIPS/eip-2537)). - Added support for AWS Secrets Manager / KMS based node key management. -## Building the source -Building quorum requires both a Go (version 1.25) and a C compiler. +## Building ibet-Core +Building ibet-Core requires both a Go (version 1.25) and a C compiler. You can install them using your favourite package manager. Once the dependencies are installed, run ``` @@ -48,13 +48,14 @@ For AWS Secrets Manager / KMS based node key setup, see ## License -The go-ethereum library (i.e. all code outside of the `cmd` directory) is licensed under the +ibet-Core is derived from GoQuorum and go-ethereum. This name change does not change the licenses of the upstream-derived code or bundled third-party components. + +The go-ethereum library code (i.e. all code outside of the `cmd` directory) is licensed under the [GNU Lesser General Public License v3.0](https://www.gnu.org/licenses/lgpl-3.0.en.html), also -included in our repository in the `COPYING.LESSER` file. +included in this repository in the `COPYING.LESSER` file. -The go-ethereum binaries (i.e. all code inside of the `cmd` directory) is licensed under the +The go-ethereum binary code (i.e. all code inside of the `cmd` directory) is licensed under the [GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.en.html), also included -in our repository in the `COPYING` file. +in this repository in the `COPYING` file. Any project planning to use the `crypto/secp256k1` sub-module must use the specific [secp256k1 standalone library](https://github.com/ConsenSys/goquorum-crypto-secp256k1) licensed under 3-clause BSD. -