Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
422 commits
Select commit Hold shift + click to select a range
7f78fa6
triedb/pathdb, core: keep root->id mappings after truncation (#32502)
rjl493456442 Aug 29, 2025
3aeccad
README: add twitter badge to documentation (#32516)
operagxoksana Aug 29, 2025
0cde527
core/rawdb: inspect database in parallel (#32506)
jsvisa Sep 1, 2025
0e69530
all: improve ETA calculation across all progress indicators (#32521)
Jolly23 Sep 1, 2025
931befe
core/stateless: only report leaf depth in witness stats (#32507)
gballet Sep 1, 2025
bd4b179
trie/bintrie: add eip7864 binary trees and run its tests (#32365)
gballet Sep 1, 2025
ffe758c
internal/ethapi,params: add `eth_config` (#32239)
lightclient Sep 1, 2025
d818a9a
version: release v1.16.3
gballet Sep 1, 2025
0978604
version: release v1.16.3 (#32528)
gballet Sep 1, 2025
1263f3d
version: begin v1.16.4 release cycle (#32529)
gballet Sep 1, 2025
c36f7be
core/stateless: track number of leaf nodes at each trie depth (#32533)
omerfirmak Sep 2, 2025
6f08b3a
core/tracing: fix selfdestruct 6780 balance change emit (#32526)
s1na Sep 2, 2025
328add2
core/tracing: add code change reason (#32525)
s1na Sep 2, 2025
0e82b6b
core/txpool: fix duplicate function comment (#32524)
keeghcet Sep 2, 2025
00516c7
core/txpool/blobpool, eth/catalyst: place null for missing blob (#32536)
rjl493456442 Sep 3, 2025
e6884cc
core/tracing: update changelog (#32535)
s1na Sep 3, 2025
70f177a
core/txpool/blobpool: fix getblobs error handling (#32538)
cskiraly Sep 4, 2025
f5fcfb2
core/rawdb: remove outdated functions (#32542)
rjl493456442 Sep 4, 2025
902ec5b
cmd, core, eth, triedb/pathdb: track node origins in the path databas…
rjl493456442 Sep 5, 2025
8ce2047
cmd/geth: set trie journal for pathdb (#32531)
jsvisa Sep 5, 2025
c4ec450
core/state: state size tracking (#32362)
jsvisa Sep 8, 2025
bc4ee71
triedb/pathdb: add recovery mechanism in state indexer (#32447)
rjl493456442 Sep 8, 2025
d95ca2e
cmd/devp2p/internal/ethtest: fix possible infinite wait (#32551)
cskiraly Sep 8, 2025
b381804
core/vm: switch modexp gas computation to uint64 (#32527)
MariusVanDerWijden Sep 8, 2025
2a3f4ce
rlp: fix typo in decode test message (#32554)
Forostovec Sep 9, 2025
5035064
core/rawdb: improve the test suite for ancient store (#32555)
VolodymyrBg Sep 9, 2025
ca6e2d1
triedb/pathdb: sync ancient store before journal (#32557)
rjl493456442 Sep 9, 2025
5cc4436
core/txpool/blobpool: disallow legacy sidecar after osaka (#32534)
mask-pp Sep 10, 2025
586ac9b
params: use spaces instead of tabs in config description (#32564)
lightclient Sep 10, 2025
d68528c
core/txpool: add sanity overflow check (#32544)
MariusVanDerWijden Sep 10, 2025
dd7fe1b
core/vm: fix modexp gas calculation (#32568)
MariusVanDerWijden Sep 10, 2025
b708feb
core/vm: fix comment and remove unused divisor in osakaModexpGas (#32…
zach871 Sep 10, 2025
1f7f95d
p2p/discover: remove delay from discv5 RandomNodes (#32517)
cskiraly Sep 10, 2025
46e4f0b
p2p/discover: add waitForNodes
fjl Aug 29, 2025
f8e0e8d
p2p/discover: add context in waitForNodes
fjl Aug 29, 2025
f4046b0
p2p/discover: move wait condition to lookupIterator
fjl Aug 29, 2025
4ed8f5e
p2p/discover: improve iterator
fjl Sep 5, 2025
e58e7f7
p2p/discover: fix bug in lookup
fjl Sep 5, 2025
721c8de
p2p/discover: trigger refresh in lookupIterator
fjl Sep 5, 2025
cf0503d
p2p/discover: track missing nodes in test
fjl Sep 5, 2025
3946708
p2p/discover: fix two bugs in lookup iterator
fjl Sep 9, 2025
3133fd3
p2p/discover: remove print in test
fjl Sep 9, 2025
a9f9e0d
p2p/discover: add imports in test
fjl Sep 9, 2025
046e2cd
params: add bpo forks to eth_config (#32579)
lightclient Sep 11, 2025
92fbbe6
ethdb/pebble: set metric namespace correctly (#32563)
GarmashAlex Sep 11, 2025
cbf0b5b
go.mod, build: require go 1.24 and upgrade linter (#32584)
fjl Sep 11, 2025
1c3703c
.github: run tests with ci.go (#32590)
fjl Sep 11, 2025
8deb682
build: upgrade to go 1.25.1 (#32593)
fjl Sep 11, 2025
8a19582
eth/catalyst: enable newpayloadV4 on BPOs (#32589)
lightclient Sep 11, 2025
72d3e88
p2p/discover: clarify lookup behavior on empty table
cskiraly Sep 12, 2025
3eab461
p2p/discover: add test for lookup returning immediately
cskiraly Sep 12, 2025
25d6596
.github: remove redundant regexp check for heading dot (#32597)
gballet Sep 12, 2025
97afa28
Revert "p2p/discover: add test for lookup returning immediately"
cskiraly Sep 12, 2025
68c18ed
Update lookup.go
fjl Sep 12, 2025
5d09aa3
accounts/abi/bind/v2: add Address method to BoundContract (#32559)
tr1sm0s1n Sep 12, 2025
0643427
p2p/discover: continue
fjl Sep 12, 2025
41f580f
core/vm: fix typo in CLZ doc (#32604)
aviggiano Sep 12, 2025
a306239
core/filtermaps: use slices.Sort to remove duplicated elements (#32602)
hero5512 Sep 15, 2025
c2fcc27
core/rawdb: fix misleading comment in HasTrieNode (#32599)
radik878 Sep 15, 2025
ec99444
core/overlay: copy BaseRoot in TransitionState.Copy (#32613)
Galoretka Sep 15, 2025
4824942
core/txpool/blobpool: filter blob txs with sidecar version (#32577)
cskiraly Sep 15, 2025
df0bd89
core/txpool/blobpool: migrate billy to new slot size (#31966)
MariusVanDerWijden Sep 15, 2025
791e9fb
rlp: remove duplicate optionalAndTailField test case (#32614)
radik878 Sep 15, 2025
6924eea
eth/catalyst: allow fcuV3 for BPO forks (#32615)
fjl Sep 15, 2025
89f364f
go.mod: add tool section in module file (#32598)
markya0616 Sep 15, 2025
b05fe4a
cmd/keeper: add the keeper zkvm guest program (#32543)
gballet Sep 15, 2025
e48242b
cmd/evm/internal/t8ntool: use ApplyTransaction instead of ApplyMessag…
fjl Sep 16, 2025
b340103
core/tracing: remove unnecessary 'copy' field skip in TestAllHooksCal…
VolodymyrBg Sep 16, 2025
3589c0d
p2p/discover: expose timeout in lookupFailed
cskiraly Sep 16, 2025
110b4e1
core/rawdb: fix typo in TestWriteAncientHeaderChain (#32587)
VolodymyrBg Sep 16, 2025
03b77d1
core/stateless: API methods to get execution witness of block
gballet Sep 16, 2025
6a7f64e
core/vm: use go-bigmodexpfix for modexp (#32576)
fjl Sep 16, 2025
de9fb97
revert to using table parameter
cskiraly Sep 17, 2025
a4c9b34
p2p/discover: add waitForNodes
cskiraly Sep 17, 2025
5ae61f9
go.mod: update c-kzg (#32639)
MariusVanDerWijden Sep 17, 2025
f6ba50b
go.mod: update go-eth-kzg (#32640)
MariusVanDerWijden Sep 17, 2025
2d3704c
core/stateless: add vmwitnessstats cli flag to report leaf stats + lo…
gballet Sep 17, 2025
21769f3
triedb/pathdb: generalize the history indexer (#32523)
rjl493456442 Sep 17, 2025
fda09c7
trie: add sub-trie iterator support (#32520)
samuelarogbonlo Sep 17, 2025
6492751
cmd/keeper: disable GC for zkvm execution (#32638)
gballet Sep 17, 2025
339cae8
core: fix fork readiness log (#32623)
lightclient Sep 18, 2025
8a171dc
core/rawdb: report truncateErr in concurrent truncate failure (#32651)
GarmashAlex Sep 18, 2025
ab95477
build: update to execution-spec-tests v5.0.0 (#32592)
fjl Sep 18, 2025
2a82964
eth/catalyst, beacon/engine: enable BPO and Osaka on stateless APIs (…
rjl493456442 Sep 18, 2025
dce511c
eth/filters, cmd: add config of eth_getLogs address limit (#32327)
hlongvu Sep 18, 2025
b9e2eb5
beacon/config: fix LoadForks with non-string values (#32609)
klim0v Sep 18, 2025
2b3d617
internal/ethapi: skip tx gas limit check for calls (#32641)
fjl Sep 19, 2025
b08b629
beacon/blsync: test validated finality (#32633)
zsfelfoldi Sep 19, 2025
9b730e1
core/state: add missing address key in state_object log (#32676)
Galoretka Sep 19, 2025
103b8b2
crypto/bn256: switch to gnark again (#32659)
MariusVanDerWijden Sep 19, 2025
1601f39
core/txpool/blobpool: remove conversion in GetBlobs (#32578)
cskiraly Sep 19, 2025
64c6de7
p2p: using testing.B.Loop (#32664)
cuiweixie Sep 19, 2025
d41dc92
core/state: using testing.B.Loop (#32658)
cuiweixie Sep 19, 2025
3ebb143
eth: using testing.B.Loop (#32657)
cuiweixie Sep 19, 2025
9b1896b
log: using testing.B.Loop (#32663)
cuiweixie Sep 19, 2025
0758a56
core: using testing.B.Loop (#32662)
cuiweixie Sep 19, 2025
79a4f76
core/vm: using testing.B.Loop (#32660)
cuiweixie Sep 19, 2025
e35c628
core/types: using testing.B.Loop (#32643)
cuiweixie Sep 19, 2025
a499a11
crypto: using testing.B.Loop (#32645)
cuiweixie Sep 19, 2025
c7eb376
fix: correct typo in TestMustParseUint64Panic error message (#32648)
CreeptoGengar Sep 19, 2025
f770ec1
common, eth: remove duplicate test cases (#32624)
zach871 Sep 19, 2025
b62e034
core/rawdb: fix bad blocks sorted failure message to map index→number…
MozirDmitriy Sep 19, 2025
fd65f56
params: update config description links to new format (#32681)
lightclient Sep 20, 2025
684f0db
core/txpool/blobpool: introduce sidecar conversion for legacy blob tr…
rjl493456442 Sep 20, 2025
4414e28
go.work.sum: add to repo (#32677)
lightclient Sep 20, 2025
479b803
core/state: fix committed-state expectations in StateDB tests (#32678)
GarmashAlex Sep 22, 2025
ada2db4
triedb/pathdb: move head truncation log (#32649)
rjl493456442 Sep 22, 2025
aa37bd0
cmd, tests: fix snapshot dump and export-preimages (#32650)
rjl493456442 Sep 22, 2025
1597d58
go.work, build: remove workspace file (#32699)
fjl Sep 22, 2025
2872242
cmd/era: fix iterator error source handling in checkAccumulator (#32698)
MozirDmitriy Sep 22, 2025
2b5718f
cmd/evm/internal/t8ntool: fix nil pointer dereference in Osaka blob g…
bshastry Sep 23, 2025
8dfd30f
core/txpool/blobpool: add legacy sidecar conversion in reinject (#32688)
rjl493456442 Sep 23, 2025
1cd0048
accounts/keystore: use runtime.AddCleanup (#32610)
cuiweixie Sep 23, 2025
4074f74
internal/ethapi: fix merge transition in eth_simulate (#32616)
deffrian Sep 23, 2025
48c74f4
trie: align AllFFPrefix test assertion and message (#32719)
VolodymyrBg Sep 24, 2025
15a94b4
build: module-aware FindMainPackages (#32736)
fjl Sep 24, 2025
bc45154
miner: default gaslimit 60M (#32734)
fjl Sep 24, 2025
ad55a3e
core/txpool/blobpool: fork boundary conversion 3 (#32716)
fjl Sep 24, 2025
7ed17f1
trie: fix TestOneElementProof expected value message (#32738)
radik878 Sep 25, 2025
1c706d1
accounts/keystore: use ticker to avoid timer allocations (#32732)
viktorking7 Sep 25, 2025
7611f35
accounts/abi/bind: fix data race in TestWaitDeployedCornerCases (#32740)
hero5512 Sep 25, 2025
965ffff
all: add bpo1 and bpo2 overrides (#32737)
lightclient Sep 25, 2025
89158aa
core/txpool/blobpool: convert and add one-by-one (#32718)
cskiraly Sep 25, 2025
ad484fc
build: upgrade to execution-spec-tests v5.1.0 (#32742)
fjl Sep 25, 2025
bacc150
core/txpool: add eip2681 check for incoming transactions (#32726)
jsvisa Sep 25, 2025
7d8ccdd
all: refactor to use builtin max/min (#32694)
cuiweixie Sep 25, 2025
0977a02
params: schedule Osaka/BPO1/BPO2 for testnets (#32735)
fjl Sep 25, 2025
b964b65
version: release go-ethereum v1.16.4 stable
fjl Sep 25, 2025
41714b4
Merge branch 'master' into release/1.16
fjl Sep 25, 2025
b1eb33c
version: begin v1.16.5 release cycle
fjl Sep 26, 2025
a8f7965
internal/ethapi: fix outdated comments (#32751)
wit765 Sep 26, 2025
2e2fece
ethapi: reject oversize storage keys before hex decode (#32750)
MatusKysel Sep 26, 2025
16b735f
signer/core: fix TestSignTx to decode res2 (#32749)
VolodymyrBg Sep 26, 2025
8e87b75
trie: correct error messages for UpdateStorage operations (#32746)
MozirDmitriy Sep 26, 2025
c984d90
eth/tracers/native: add keccak256preimage tracer (#32569)
draganm Sep 26, 2025
b19452d
params: add amsterdam fork config (#32687)
MariusVanDerWijden Sep 26, 2025
943a30d
build: remove duplicated func FileExist (#32768)
cuiweixie Sep 29, 2025
265db06
eth/catalyst: check osaka in engine_getBlobsV1 (#32731)
jsvisa Sep 29, 2025
c5a1c35
trie: fix error message in test (#32772)
VolodymyrBg Sep 29, 2025
4b08020
internal/ethapi: remove redundant check in test (#32760)
GarmashAlex Sep 29, 2025
46b7e78
cmd/evm/internal/t8ntool: panic on database corruption (#32776)
CPerezz Sep 29, 2025
ea28346
params: fix bpo config comments (#32755)
lightclient Sep 29, 2025
1cfe624
core/rawdb: update comments (#32668)
VolodymyrBg Sep 29, 2025
891bbad
params: implement String() method for ChainConfig (#32766)
futreall Sep 29, 2025
01d0ce0
params: add blob config information in the banner (#32771)
rjl493456442 Sep 30, 2025
c1e9d78
core/txpool: remove unused signer field from TxPool (#32787)
MozirDmitriy Sep 30, 2025
2037c53
core/state: correct expected value in TestMessageCallGas (#32780)
Galoretka Sep 30, 2025
6f8e28b
go.mod, cmd/keeper/go.mod: upgrade victoria metrics dependency (#32720)
gballet Sep 30, 2025
9986270
eth/catalyst: extend payloadVersion support to osaka/post-osaka forks…
yysung1123 Sep 30, 2025
f9756bb
p2p: fix error message in test (#32804)
zach871 Sep 30, 2025
bb00d26
signer/core: fix error message in test (#32807)
zach871 Sep 30, 2025
1487a85
params: fix banner message (#32796)
zach871 Sep 30, 2025
0576671
core/types, trie: reduce allocations in derivesha (#30747)
holiman Oct 1, 2025
f0dc47a
p2p/enode: fix discovery AyncFilter deadlock on shutdown (#32572)
zzzckck Oct 2, 2025
fc8c8c1
core: refactor StateProcessor to accept ChainContext interface (#32739)
hero5512 Oct 2, 2025
4927e89
p2p/enode: fix asyncfilter comment (#32823)
cskiraly Oct 2, 2025
1e4b39e
trie: cleaner array concatenation (#32756)
hero5512 Oct 2, 2025
477ee58
internal/ethapi: add timestamp to logs in eth_simulate (#32831)
deffrian Oct 6, 2025
ee30982
build: faster gh actions workflow, no ubuntu on appveyor (#32829)
s1na Oct 7, 2025
d67037a
cmd/devp2p/internal/ethtest: update to PoS-only test chain (#32850)
fjl Oct 8, 2025
168d699
core/rawdb: remove duplicated type storedReceiptRLP (#32820)
sashass1315 Oct 8, 2025
064ab70
eth/protocols/eth: use BlockChain interface in Handshake (#32847)
ngotchac Oct 8, 2025
e42af53
cmd/devp2p/internal/ethtest: accept responses in any order (#32834)
flcl42 Oct 8, 2025
695c144
core/rawdb: correct misleading comments for state history accessors (…
phrwlk Oct 9, 2025
a1b8e48
eth/filters: terminate pending tx subscription on error (#32794)
CertiK-Geth Oct 9, 2025
1120855
eth/filters: add `transactionReceipts` subscription (#32697)
10gic Oct 9, 2025
4d6d5a3
core/txpool/legacypool: fix validTxMeter to count transactions (#32845)
cskiraly Oct 10, 2025
ed264a1
eth/protocols/snap: optimize incHash (#32748)
cuiweixie Oct 10, 2025
de24450
core/rawdb, triedb/pathdb: introduce trienode history (#32596)
rjl493456442 Oct 10, 2025
659342a
ethclient: add SubscribeTransactionReceipts (#32869)
10gic Oct 10, 2025
a3aae29
node: fix error condition in gzipResponseWriter.init() (#32896)
lukema95 Oct 13, 2025
2010781
core/types: optimize MergeBloom by using bitutil (#32882)
cuiweixie Oct 13, 2025
85e9977
p2p: rm unused var seedMinTableTime (#32876)
jsvisa Oct 13, 2025
bc0a21a
eth/filters: uninstall subscription in filter apis on error (#32894)
hyeonLewis Oct 13, 2025
a7359ce
triedb, core/rawdb: implement the partial read in freezer (#32132)
jsvisa Oct 13, 2025
5c6ba6b
p2p/enode: optimize LogDist (#32887)
cuiweixie Oct 13, 2025
b87581f
p2p/enode: optimize DistCmp (#32888)
cuiweixie Oct 13, 2025
7b693ea
core/txpool/legacypool: move queue out of main txpool (#32270)
MariusVanDerWijden Oct 13, 2025
b28241b
cmd/workload: filter fuzzer test (#31613)
zsfelfoldi Oct 13, 2025
6337577
p2p/discover: wait for bootstrap to be done (#32881)
jsvisa Oct 13, 2025
52c484d
triedb/pathdb: catch int conversion overflow in 32-bit (#32899)
gballet Oct 14, 2025
00f6f2b
eth/catalyst: remove useless log on enabling Engine API (#32901)
cskiraly Oct 14, 2025
fb8d229
eth: do not warn on switching from snap sync to full sync (#32900)
cskiraly Oct 14, 2025
e03d97a
core/txpool/legacypool: fix pricedList updates (#32906)
rjl493456442 Oct 14, 2025
55a5320
accounts/abi: check presence of payable fallback or receive before pr…
cuiweixie Oct 14, 2025
f6064f3
internal/ethapi: convert legacy blobtx proofs in sendRawTransaction (…
fjl Oct 14, 2025
3cfc334
rpc: fix flaky test TestServerWebsocketReadLimit (#32889)
mishraa-G Oct 15, 2025
40505a9
eth/protocols/eth: reject message containing duplicated txs and drop …
jsvisa Oct 15, 2025
7c107c2
p2p/discover: remove hot-spin in table refresh trigger (#32912)
fjl Oct 15, 2025
32ccb54
version: release go-ethereum v1.16.5 stable
fjl Oct 16, 2025
737ffd1
Merge branch 'master' into release/1.16
fjl Oct 16, 2025
367b5fb
version: begin v1.16.6 release cycle
fjl Oct 16, 2025
5c53507
cmd/geth: log current key in expandVerkle instead of keylist[0] (#32689)
Galoretka Oct 16, 2025
c37bd67
ethclient: add support for eth_simulateV1 (#32856)
hero5512 Oct 16, 2025
ff54ca0
internal/ethapi: add eth_SendRawTransactionSync (#32830)
aodhgan Oct 16, 2025
b373d79
core/state: state copy bugfixes with Verkle Trees (#31696)
yazzaoui Oct 16, 2025
0a2c21a
eth/ethconfig : fix eth generate config (#32929)
ucwong Oct 17, 2025
342285b
eth, internal: add blob conversion for SendRawTransactionSync (#32930)
rjl493456442 Oct 17, 2025
0ec6327
cmd/utils: use maximum uint64 value for receipt chain insertion (#32934)
CertiK-Geth Oct 18, 2025
a9e6626
eth/fetcher: add metrics for tracking slow peers (#32964)
healthykim Oct 20, 2025
88576c5
eth/fetcher: remove dangling peers from alternates (#32947)
healthykim Oct 20, 2025
11c0fb9
triedb/pathdb: fix index out of range panic in decodeSingle (#32937)
hero5512 Oct 20, 2025
69df6bb
core/types: prealloc map in HashDifference as in TxDifference (#32946)
cuiweixie Oct 20, 2025
cfb3111
eth/filters: avoid rebuild the hash map multi times (#32965)
mask-pp Oct 20, 2025
b6a4ac9
core/vm: don't call SetCode after contract creation if initcode didn'…
jwasinger Oct 20, 2025
b1809d1
cmd/keeper: use the ziren keccak precompile (#32816)
gballet Oct 20, 2025
b81f03e
params: enable osaka on dev mode (#32917)
MariusVanDerWijden Oct 20, 2025
d73bfeb
core/txpool: Initialize journal writer for tx tracker (#32921)
KyrinCode Oct 21, 2025
79b6a56
core/state: prevent SetCode hook if contract code is not changed (#32…
rjl493456442 Oct 21, 2025
0a8b820
triedb/pathdb: make batch with pre-allocated size (#32914)
rjl493456442 Oct 21, 2025
407d9fa
cmd/geth: add flag to set genesis (#32844)
lightclient Oct 21, 2025
6608a2a
core/types: remove unused `ErrInvalidTxType` var (#32989)
cuiweixie Oct 21, 2025
3b80752
core/state: fix the flaky TestSizeTracker (#32993)
jsvisa Oct 22, 2025
116c916
cmd/devp2p: distinguish the jwt in devp2p and geth (#32972)
jsvisa Oct 22, 2025
2bb3d9a
p2p: silence on listener shutdown (#33001)
jsvisa Oct 23, 2025
030cd2d
cmd/utils: use IsHexAddress method (#32997)
mask-pp Oct 23, 2025
f1be215
crypto: implement ziren keccak state (#32996)
gballet Oct 23, 2025
0413af4
rpc: fix a flaky test of the websocket (#33002)
jsvisa Oct 23, 2025
53c85da
eth/tracers: fix crasher in TraceCall with BlockOverrides (#33015)
hero5512 Oct 24, 2025
074d7b7
.gitea/workflows, build: add release build for keeper (#32632)
gballet Oct 24, 2025
17e5222
build: fix keeper build (#33018)
fjl Oct 24, 2025
cfa3b96
core/rawdb, triedb/pathdb: re-structure the trienode history header (…
rjl493456442 Oct 25, 2025
7fb91f3
rpc: remove unused vars (#33012)
rizkyikiw42 Oct 26, 2025
078a5ec
core/state: improve accessList copy (#33024)
cuiweixie Oct 26, 2025
447b5f7
core: don't modify the shared chainId between tests (#33020)
jsvisa Oct 27, 2025
33dbd64
core/types: optimize modernSigner.Equal (#32971)
cuiweixie Oct 27, 2025
b1db341
core: refine condition for using legacy chain freezer directory (#33032)
jsvisa Oct 28, 2025
59d08c6
internal/jsre: pass correct args to setTimeout/setInterval callbacks …
anim001k Oct 28, 2025
739f6f4
.github: add 32-bit CI targets (#32911)
gballet Oct 28, 2025
ae37b49
accounts/abi/bind/v2: fix error assertion in test (#33041)
alarso16 Oct 29, 2025
5dd0fe2
p2p: cleanup v4 if v5 failed (#33005)
jsvisa Oct 29, 2025
ccacbd1
common: simplify FileExist helper (#32969)
MamunC0der Oct 30, 2025
243407a
eth/downloader: fix incorrect waitgroup in test `XTestDelivery` (#33047)
wit765 Oct 30, 2025
e6d34c1
eth/tracers: fix prestateTracer for EIP-6780 SELFDESTRUCT (#33050)
hero5512 Oct 31, 2025
18a9027
common: fix duration comparison in PrettyAge (#33064)
maradini77 Nov 1, 2025
28c59b7
core/rawdb: fix db inspector by supporting trienode history (#33087)
rjl493456442 Nov 3, 2025
0250724
params: set osaka and BPO1 & BPO2 mainnet dates (#33063)
MariusVanDerWijden Nov 3, 2025
044828e
version: release go-ethereum v1.16.6
fjl Nov 3, 2025
386c3de
Merge branch 'master' into release/1.16
fjl Nov 3, 2025
5b77af3
version: begin v1.16.7 release cycle
fjl Nov 3, 2025
653f8d4
go.mod: update to c-kzg v2.1.5 (#33093)
MariusVanDerWijden Nov 4, 2025
07129d2
version: release go-ethereum v1.16.7 stable
fjl Nov 4, 2025
b9f3a3d
Merge branch 'master' into release/1.16
fjl Nov 4, 2025
2425eea
Merge branch 'geth-v-1-16-7' into upstream-geth-v-1-16-7
allformless Dec 31, 2025
a8e8014
Revert "eth/protocols/eth: reject message containing duplicated txs a…
allformless Jan 8, 2026
954d67b
upstream: fix after merging geth v1.16.7 (#15)
allformless Jan 8, 2026
30c78d4
fix: fix evm ci (#24)
flywukong Jan 8, 2026
f4d66f2
pathdb: add backward compatibility for legacy journal file format
zlacfzy Jan 9, 2026
ea120ec
Merge branch 'develop' into upstream-geth-v-1-16-7
allformless Jan 14, 2026
d848390
core/vm: remove useless change
allformless Jan 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ eth/tracers/ @s1na
ethclient/ @fjl
ethdb/ @rjl493456442
event/ @fjl
trie/ @rjl493456442
trie/ @rjl493456442 @gballet
triedb/ @rjl493456442
core/tracing/ @s1na
graphql/ @s1na
Expand All @@ -29,5 +29,5 @@ miner/ @MariusVanDerWijden @fjl @rjl493456442
node/ @fjl
p2p/ @fjl @zsfelfoldi
rlp/ @fjl
params/ @fjl @karalabe @gballet @rjl493456442 @zsfelfoldi
params/ @fjl @gballet @rjl493456442 @zsfelfoldi
rpc/ @fjl
2 changes: 1 addition & 1 deletion .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
unit-test:
strategy:
matrix:
go-version: [1.24.x]
go-version: [1.25.x]
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/evm-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
evm-test:
strategy:
matrix:
go-version: [1.24.x]
go-version: [1.25.x]
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
golang-lint:
strategy:
matrix:
go-version: [1.24.x]
go-version: [1.25.x]
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/nancy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
if: github.event.pull_request.head.repo.full_name == github.repository
strategy:
matrix:
go-version: [1.24.x]
go-version: [1.25.x]
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pre-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
name: Build Release
strategy:
matrix:
go-version: [1.24.x]
go-version: [1.25.x]
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
name: Build Release
strategy:
matrix:
go-version: [1.24.x]
go-version: [1.25.x]
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/unit-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
unit-test:
strategy:
matrix:
go-version: [1.24.x]
go-version: [1.25.x]
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
Expand Down
23 changes: 23 additions & 0 deletions .github/workflows/validate_pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: PR Format Validation

on:
pull_request:
types: [opened, edited, synchronize]

jobs:
validate-pr:
runs-on: ubuntu-latest
steps:
- name: Check PR Title Format
uses: actions/github-script@v7
with:
script: |
const prTitle = context.payload.pull_request.title;
const titleRegex = /^([\w\s,{}/.]+): .+/;
if (!titleRegex.test(prTitle)) {
core.setFailed(`PR title "${prTitle}" does not match required format: directory, ...: description`);
return;
}
console.log('✅ PR title format is valid');
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,5 @@ cmd/ethkey/ethkey
cmd/evm/evm
cmd/geth/geth
cmd/rlpdump/rlpdump
cmd/workload/workload
cmd/workload/workload
cmd/keeper/keeper
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ ARG VERSION=""
ARG BUILDNUM=""

# Build Geth in a stock Go builder container
FROM golang:1.24-alpine AS builder
FROM golang:1.25-alpine AS builder

RUN apk add --no-cache make cmake gcc musl-dev linux-headers git bash build-base libc-dev
# Get dependencies - will also be cached if we won't change go.mod/go.sum
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile.alltools
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ ARG VERSION=""
ARG BUILDNUM=""

# Build Geth in a stock Go builder container
FROM golang:1.24-alpine AS builder
FROM golang:1.25-alpine AS builder

RUN apk add --no-cache gcc musl-dev linux-headers git
# Get dependencies - will also be cached if we won't change go.mod/go.sum
Expand Down
6 changes: 5 additions & 1 deletion accounts/abi/abigen/bind.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ import (
"github.com/ethereum/go-ethereum/log"
)

var (
intRegex = regexp.MustCompile(`(u)?int([0-9]*)`)
)

func isKeyWord(arg string) bool {
switch arg {
case "break":
Expand Down Expand Up @@ -299,7 +303,7 @@ func bindBasicType(kind abi.Type) string {
case abi.AddressTy:
return "common.Address"
case abi.IntTy, abi.UintTy:
parts := regexp.MustCompile(`(u)?int([0-9]*)`).FindStringSubmatch(kind.String())
parts := intRegex.FindStringSubmatch(kind.String())
switch parts[2] {
case "8", "16", "32", "64":
return fmt.Sprintf("%sint%s", parts[1], parts[2])
Expand Down
6 changes: 3 additions & 3 deletions accounts/abi/abigen/bind_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -484,13 +484,13 @@ var bindTests = []struct {
contract Defaulter {
address public caller;

function() {
fallback() external payable {
caller = msg.sender;
}
}
`,
[]string{`6060604052606a8060106000396000f360606040523615601d5760e060020a6000350463fc9c8d3981146040575b605e6000805473ffffffffffffffffffffffffffffffffffffffff191633179055565b606060005473ffffffffffffffffffffffffffffffffffffffff1681565b005b6060908152602090f3`},
[]string{`[{"constant":true,"inputs":[],"name":"caller","outputs":[{"name":"","type":"address"}],"type":"function"}]`},
[]string{`608060405234801561000f575f80fd5b5061013d8061001d5f395ff3fe608060405260043610610021575f3560e01c8063fc9c8d391461006257610022565b5b335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055005b34801561006d575f80fd5b5061007661008c565b60405161008391906100ee565b60405180910390f35b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100d8826100af565b9050919050565b6100e8816100ce565b82525050565b5f6020820190506101015f8301846100df565b9291505056fea26469706673582212201e9273ecfb1f534644c77f09a25c21baaba81cf1c444ebc071e12a225a23c72964736f6c63430008140033`},
[]string{`[{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"caller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]`},
`
"math/big"

Expand Down
2 changes: 1 addition & 1 deletion accounts/abi/abigen/source2.go.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ var (
// Solidity: {{.Original.String}}
func ({{ decapitalise $contract.Type}} *{{$contract.Type}}) Unpack{{.Normalized.Name}}Event(log *types.Log) (*{{$contract.Type}}{{.Normalized.Name}}, error) {
event := "{{.Original.Name}}"
if log.Topics[0] != {{ decapitalise $contract.Type}}.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != {{ decapitalise $contract.Type}}.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new({{$contract.Type}}{{.Normalized.Name}})
Expand Down
2 changes: 1 addition & 1 deletion accounts/abi/abigen/testdata/v2/crowdsale.go.txt
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ func (CrowdsaleFundTransfer) ContractEventName() string {
// Solidity: event FundTransfer(address backer, uint256 amount, bool isContribution)
func (crowdsale *Crowdsale) UnpackFundTransferEvent(log *types.Log) (*CrowdsaleFundTransfer, error) {
event := "FundTransfer"
if log.Topics[0] != crowdsale.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != crowdsale.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(CrowdsaleFundTransfer)
Expand Down
10 changes: 5 additions & 5 deletions accounts/abi/abigen/testdata/v2/dao.go.txt
Original file line number Diff line number Diff line change
Expand Up @@ -606,7 +606,7 @@ func (DAOChangeOfRules) ContractEventName() string {
// Solidity: event ChangeOfRules(uint256 minimumQuorum, uint256 debatingPeriodInMinutes, int256 majorityMargin)
func (dAO *DAO) UnpackChangeOfRulesEvent(log *types.Log) (*DAOChangeOfRules, error) {
event := "ChangeOfRules"
if log.Topics[0] != dAO.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != dAO.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(DAOChangeOfRules)
Expand Down Expand Up @@ -648,7 +648,7 @@ func (DAOMembershipChanged) ContractEventName() string {
// Solidity: event MembershipChanged(address member, bool isMember)
func (dAO *DAO) UnpackMembershipChangedEvent(log *types.Log) (*DAOMembershipChanged, error) {
event := "MembershipChanged"
if log.Topics[0] != dAO.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != dAO.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(DAOMembershipChanged)
Expand Down Expand Up @@ -692,7 +692,7 @@ func (DAOProposalAdded) ContractEventName() string {
// Solidity: event ProposalAdded(uint256 proposalID, address recipient, uint256 amount, string description)
func (dAO *DAO) UnpackProposalAddedEvent(log *types.Log) (*DAOProposalAdded, error) {
event := "ProposalAdded"
if log.Topics[0] != dAO.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != dAO.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(DAOProposalAdded)
Expand Down Expand Up @@ -736,7 +736,7 @@ func (DAOProposalTallied) ContractEventName() string {
// Solidity: event ProposalTallied(uint256 proposalID, int256 result, uint256 quorum, bool active)
func (dAO *DAO) UnpackProposalTalliedEvent(log *types.Log) (*DAOProposalTallied, error) {
event := "ProposalTallied"
if log.Topics[0] != dAO.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != dAO.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(DAOProposalTallied)
Expand Down Expand Up @@ -780,7 +780,7 @@ func (DAOVoted) ContractEventName() string {
// Solidity: event Voted(uint256 proposalID, bool position, address voter, string justification)
func (dAO *DAO) UnpackVotedEvent(log *types.Log) (*DAOVoted, error) {
event := "Voted"
if log.Topics[0] != dAO.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != dAO.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(DAOVoted)
Expand Down
10 changes: 5 additions & 5 deletions accounts/abi/abigen/testdata/v2/eventchecker.go.txt
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ func (EventCheckerDynamic) ContractEventName() string {
// Solidity: event dynamic(string indexed idxStr, bytes indexed idxDat, string str, bytes dat)
func (eventChecker *EventChecker) UnpackDynamicEvent(log *types.Log) (*EventCheckerDynamic, error) {
event := "dynamic"
if log.Topics[0] != eventChecker.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != eventChecker.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(EventCheckerDynamic)
Expand Down Expand Up @@ -112,7 +112,7 @@ func (EventCheckerEmpty) ContractEventName() string {
// Solidity: event empty()
func (eventChecker *EventChecker) UnpackEmptyEvent(log *types.Log) (*EventCheckerEmpty, error) {
event := "empty"
if log.Topics[0] != eventChecker.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != eventChecker.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(EventCheckerEmpty)
Expand Down Expand Up @@ -154,7 +154,7 @@ func (EventCheckerIndexed) ContractEventName() string {
// Solidity: event indexed(address indexed addr, int256 indexed num)
func (eventChecker *EventChecker) UnpackIndexedEvent(log *types.Log) (*EventCheckerIndexed, error) {
event := "indexed"
if log.Topics[0] != eventChecker.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != eventChecker.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(EventCheckerIndexed)
Expand Down Expand Up @@ -196,7 +196,7 @@ func (EventCheckerMixed) ContractEventName() string {
// Solidity: event mixed(address indexed addr, int256 num)
func (eventChecker *EventChecker) UnpackMixedEvent(log *types.Log) (*EventCheckerMixed, error) {
event := "mixed"
if log.Topics[0] != eventChecker.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != eventChecker.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(EventCheckerMixed)
Expand Down Expand Up @@ -238,7 +238,7 @@ func (EventCheckerUnnamed) ContractEventName() string {
// Solidity: event unnamed(uint256 indexed arg0, uint256 indexed arg1)
func (eventChecker *EventChecker) UnpackUnnamedEvent(log *types.Log) (*EventCheckerUnnamed, error) {
event := "unnamed"
if log.Topics[0] != eventChecker.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != eventChecker.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(EventCheckerUnnamed)
Expand Down
2 changes: 1 addition & 1 deletion accounts/abi/abigen/testdata/v2/nameconflict.go.txt
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ func (NameConflictLog) ContractEventName() string {
// Solidity: event log(int256 msg, int256 _msg)
func (nameConflict *NameConflict) UnpackLogEvent(log *types.Log) (*NameConflictLog, error) {
event := "log"
if log.Topics[0] != nameConflict.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != nameConflict.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(NameConflictLog)
Expand Down
2 changes: 1 addition & 1 deletion accounts/abi/abigen/testdata/v2/numericmethodname.go.txt
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ func (NumericMethodNameE1TestEvent) ContractEventName() string {
// Solidity: event _1TestEvent(address _param)
func (numericMethodName *NumericMethodName) UnpackE1TestEventEvent(log *types.Log) (*NumericMethodNameE1TestEvent, error) {
event := "_1TestEvent"
if log.Topics[0] != numericMethodName.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != numericMethodName.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(NumericMethodNameE1TestEvent)
Expand Down
4 changes: 2 additions & 2 deletions accounts/abi/abigen/testdata/v2/overload.go.txt
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ func (OverloadBar) ContractEventName() string {
// Solidity: event bar(uint256 i)
func (overload *Overload) UnpackBarEvent(log *types.Log) (*OverloadBar, error) {
event := "bar"
if log.Topics[0] != overload.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != overload.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(OverloadBar)
Expand Down Expand Up @@ -156,7 +156,7 @@ func (OverloadBar0) ContractEventName() string {
// Solidity: event bar(uint256 i, uint256 j)
func (overload *Overload) UnpackBar0Event(log *types.Log) (*OverloadBar0, error) {
event := "bar0"
if log.Topics[0] != overload.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != overload.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(OverloadBar0)
Expand Down
2 changes: 1 addition & 1 deletion accounts/abi/abigen/testdata/v2/token.go.txt
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ func (TokenTransfer) ContractEventName() string {
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (token *Token) UnpackTransferEvent(log *types.Log) (*TokenTransfer, error) {
event := "Transfer"
if log.Topics[0] != token.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != token.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(TokenTransfer)
Expand Down
4 changes: 2 additions & 2 deletions accounts/abi/abigen/testdata/v2/tuple.go.txt
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ func (TupleTupleEvent) ContractEventName() string {
// Solidity: event TupleEvent((uint256,uint256[],(uint256,uint256)[]) a, (uint256,uint256)[2][] b, (uint256,uint256)[][2] c, (uint256,uint256[],(uint256,uint256)[])[] d, uint256[] e)
func (tuple *Tuple) UnpackTupleEventEvent(log *types.Log) (*TupleTupleEvent, error) {
event := "TupleEvent"
if log.Topics[0] != tuple.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != tuple.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(TupleTupleEvent)
Expand Down Expand Up @@ -234,7 +234,7 @@ func (TupleTupleEvent2) ContractEventName() string {
// Solidity: event TupleEvent2((uint8,uint8)[] arg0)
func (tuple *Tuple) UnpackTupleEvent2Event(log *types.Log) (*TupleTupleEvent2, error) {
event := "TupleEvent2"
if log.Topics[0] != tuple.abi.Events[event].ID {
if len(log.Topics) == 0 || log.Topics[0] != tuple.abi.Events[event].ID {
return nil, errors.New("event signature mismatch")
}
out := new(TupleTupleEvent2)
Expand Down
11 changes: 9 additions & 2 deletions accounts/abi/bind/v2/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,11 @@ func NewBoundContract(address common.Address, abi abi.ABI, caller ContractCaller
}
}

// Address returns the deployment address of the contract.
func (c *BoundContract) Address() common.Address {
return c.address
}

// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
Expand Down Expand Up @@ -272,8 +277,10 @@ func (c *BoundContract) RawCreationTransact(opts *TransactOpts, calldata []byte)
// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (c *BoundContract) Transfer(opts *TransactOpts) (*types.Transaction, error) {
// todo(rjl493456442) check the payable fallback or receive is defined
// or not, reject invalid transaction at the first place
// Check if payable fallback or receive is defined
if !c.abi.HasReceive() && !(c.abi.HasFallback() && c.abi.Fallback.IsPayable()) {
return nil, fmt.Errorf("contract does not have a payable fallback or receive function")
}
return c.transact(opts, &c.address, nil)
}

Expand Down
4 changes: 2 additions & 2 deletions accounts/abi/bind/v2/internal/contracts/db/bindings.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions accounts/abi/bind/v2/internal/contracts/events/bindings.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading