mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-26 08:15:19 +00:00
migrate from v0.25
Some checks failed
Continuous Integration (Commit) / lint (push) Has been cancelled
Some checks failed
Continuous Integration (Commit) / lint (push) Has been cancelled
This commit is contained in:
parent
003bff6bf5
commit
2ce418a5eb
@ -80,7 +80,7 @@ printf "original evm util module params\n %s" , "$originalEvmUtilParams"
|
|||||||
# change the params of the chain like a god - make it so 🖖🏽
|
# change the params of the chain like a god - make it so 🖖🏽
|
||||||
# make sure to update god committee member permissions for the module
|
# make sure to update god committee member permissions for the module
|
||||||
# and params being updated (see below for example)
|
# and params being updated (see below for example)
|
||||||
# https://github.com/Kava-Labs/kava/pull/1556/files#diff-0bd6043650c708661f37bbe6fa5b29b52149e0ec0069103c3954168fc9f12612R900-R903
|
# https://github.com/0glabs/0g-chain/pull/1556/files#diff-0bd6043650c708661f37bbe6fa5b29b52149e0ec0069103c3954168fc9f12612R900-R903
|
||||||
kava tx committee submit-proposal 1 "$proposalFileName" --gas 2000000 --gas-prices 0.01ukava --from god -y
|
kava tx committee submit-proposal 1 "$proposalFileName" --gas 2000000 --gas-prices 0.01ukava --from god -y
|
||||||
|
|
||||||
# fetch current module params
|
# fetch current module params
|
||||||
|
2
.github/scripts/seed-internal-testnet.sh
vendored
2
.github/scripts/seed-internal-testnet.sh
vendored
@ -170,7 +170,7 @@ printf "original evm util module params\n %s" , "$originalEvmUtilParams"
|
|||||||
# change the params of the chain like a god - make it so 🖖🏽
|
# change the params of the chain like a god - make it so 🖖🏽
|
||||||
# make sure to update god committee member permissions for the module
|
# make sure to update god committee member permissions for the module
|
||||||
# and params being updated (see below for example)
|
# and params being updated (see below for example)
|
||||||
# https://github.com/Kava-Labs/kava/pull/1556/files#diff-0bd6043650c708661f37bbe6fa5b29b52149e0ec0069103c3954168fc9f12612R900-R903
|
# https://github.com/0glabs/0g-chain/pull/1556/files#diff-0bd6043650c708661f37bbe6fa5b29b52149e0ec0069103c3954168fc9f12612R900-R903
|
||||||
# committee 1 is the stability committee. on internal testnet, this has only one member.
|
# committee 1 is the stability committee. on internal testnet, this has only one member.
|
||||||
kava tx committee submit-proposal 1 "$proposalFileName" --gas 2000000 --gas-prices 0.01ukava --from god -y
|
kava tx committee submit-proposal 1 "$proposalFileName" --gas 2000000 --gas-prices 0.01ukava --from god -y
|
||||||
|
|
||||||
|
2
.github/scripts/seed-protonet.sh
vendored
2
.github/scripts/seed-protonet.sh
vendored
@ -164,7 +164,7 @@ printf "original evm util module params\n %s" , "$originalEvmUtilParams"
|
|||||||
# change the params of the chain like a god - make it so 🖖🏽
|
# change the params of the chain like a god - make it so 🖖🏽
|
||||||
# make sure to update god committee member permissions for the module
|
# make sure to update god committee member permissions for the module
|
||||||
# and params being updated (see below for example)
|
# and params being updated (see below for example)
|
||||||
# https://github.com/Kava-Labs/kava/pull/1556/files#diff-0bd6043650c708661f37bbe6fa5b29b52149e0ec0069103c3954168fc9f12612R900-R903
|
# https://github.com/0glabs/0g-chain/pull/1556/files#diff-0bd6043650c708661f37bbe6fa5b29b52149e0ec0069103c3954168fc9f12612R900-R903
|
||||||
kava tx committee submit-proposal 1 "$proposalFileName" --gas 2000000 --gas-prices 0.01ukava --from god -y
|
kava tx committee submit-proposal 1 "$proposalFileName" --gas 2000000 --gas-prices 0.01ukava --from god -y
|
||||||
|
|
||||||
sleep $AVG_SECONDS_BETWEEN_BLOCKS
|
sleep $AVG_SECONDS_BETWEEN_BLOCKS
|
||||||
|
180
CHANGELOG.md
180
CHANGELOG.md
@ -186,7 +186,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
|||||||
## [v0.13.0]
|
## [v0.13.0]
|
||||||
|
|
||||||
- Hard Protocol - Introduces borrowing functionality to HARD protocol. See full
|
- Hard Protocol - Introduces borrowing functionality to HARD protocol. See full
|
||||||
[spec](https://github.com/Kava-Labs/kava/tree/master/x/hard/spec)
|
[spec](https://github.com/0glabs/0g-chain/tree/master/x/hard/spec)
|
||||||
|
|
||||||
### Breaking changes
|
### Breaking changes
|
||||||
|
|
||||||
@ -283,9 +283,9 @@ non-breaking manner and that nodes will be able to update seamlessly after the
|
|||||||
launch of kava-3.
|
launch of kava-3.
|
||||||
|
|
||||||
The steps for upgrading to kava-3 can be found
|
The steps for upgrading to kava-3 can be found
|
||||||
[here](https://github.com/Kava-Labs/kava/blob/v0.10.0/contrib/kava-3/migration.md).
|
[here](https://github.com/0glabs/0g-chain/blob/v0.10.0/contrib/kava-3/migration.md).
|
||||||
Please note the additional section on
|
Please note the additional section on
|
||||||
[pruning](https://github.com/Kava-Labs/kava/blob/v0.10.0/contrib/kava-3/migration.md#Pruning).
|
[pruning](https://github.com/0glabs/0g-chain/blob/v0.10.0/contrib/kava-3/migration.md#Pruning).
|
||||||
|
|
||||||
## [v0.8.0] kava-3 Release
|
## [v0.8.0] kava-3 Release
|
||||||
|
|
||||||
@ -297,7 +297,7 @@ state-machine faults that require a new version to launch successfully.
|
|||||||
### Migration
|
### Migration
|
||||||
|
|
||||||
The steps for upgrading to kava-3 can be found
|
The steps for upgrading to kava-3 can be found
|
||||||
[here](https://github.com/Kava-Labs/kava/blob/v0.10.0/contrib/kava-3/migration.md)
|
[here](https://github.com/0glabs/0g-chain/blob/v0.10.0/contrib/kava-3/migration.md)
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
@ -337,91 +337,91 @@ the [changelog](https://github.com/cosmos/cosmos-sdk/blob/v0.38.4/CHANGELOG.md).
|
|||||||
|
|
||||||
### Improvements
|
### Improvements
|
||||||
|
|
||||||
- [#257](https://github.com/Kava-Labs/kava/pulls/257) Include scripts to run
|
- [#257](https://github.com/0glabs/0g-chain/pulls/257) Include scripts to run
|
||||||
large-scale simulations remotely using aws-batch
|
large-scale simulations remotely using aws-batch
|
||||||
|
|
||||||
[#1922]: https://github.com/Kava-Labs/kava/pull/1922
|
[#1922]: https://github.com/0glabs/0g-chain/pull/1922
|
||||||
[#1851]: https://github.com/Kava-Labs/kava/pull/1851
|
[#1851]: https://github.com/0glabs/0g-chain/pull/1851
|
||||||
[#1846]: https://github.com/Kava-Labs/kava/pull/1846
|
[#1846]: https://github.com/0glabs/0g-chain/pull/1846
|
||||||
[#1848]: https://github.com/Kava-Labs/kava/pull/1848
|
[#1848]: https://github.com/0glabs/0g-chain/pull/1848
|
||||||
[#1839]: https://github.com/Kava-Labs/kava/pull/1839
|
[#1839]: https://github.com/0glabs/0g-chain/pull/1839
|
||||||
[#1836]: https://github.com/Kava-Labs/kava/pull/1836
|
[#1836]: https://github.com/0glabs/0g-chain/pull/1836
|
||||||
[#1832]: https://github.com/Kava-Labs/kava/pull/1832
|
[#1832]: https://github.com/0glabs/0g-chain/pull/1832
|
||||||
[#1822]: https://github.com/Kava-Labs/kava/pull/1822
|
[#1822]: https://github.com/0glabs/0g-chain/pull/1822
|
||||||
[#1811]: https://github.com/Kava-Labs/kava/pull/1811
|
[#1811]: https://github.com/0glabs/0g-chain/pull/1811
|
||||||
[#1804]: https://github.com/Kava-Labs/kava/pull/1804
|
[#1804]: https://github.com/0glabs/0g-chain/pull/1804
|
||||||
[#1785]: https://github.com/Kava-Labs/kava/pull/1785
|
[#1785]: https://github.com/0glabs/0g-chain/pull/1785
|
||||||
[#1784]: https://github.com/Kava-Labs/kava/pull/1784
|
[#1784]: https://github.com/0glabs/0g-chain/pull/1784
|
||||||
[#1770]: https://github.com/Kava-Labs/kava/pull/1770
|
[#1770]: https://github.com/0glabs/0g-chain/pull/1770
|
||||||
[#1755]: https://github.com/Kava-Labs/kava/pull/1755
|
[#1755]: https://github.com/0glabs/0g-chain/pull/1755
|
||||||
[#1761]: https://github.com/Kava-Labs/kava/pull/1761
|
[#1761]: https://github.com/0glabs/0g-chain/pull/1761
|
||||||
[#1752]: https://github.com/Kava-Labs/kava/pull/1752
|
[#1752]: https://github.com/0glabs/0g-chain/pull/1752
|
||||||
[#1751]: https://github.com/Kava-Labs/kava/pull/1751
|
[#1751]: https://github.com/0glabs/0g-chain/pull/1751
|
||||||
[#1745]: https://github.com/Kava-Labs/kava/pull/1745
|
[#1745]: https://github.com/0glabs/0g-chain/pull/1745
|
||||||
[#1729]: https://github.com/Kava-Labs/kava/pull/1729
|
[#1729]: https://github.com/0glabs/0g-chain/pull/1729
|
||||||
[#1707]: https://github.com/Kava-Labs/kava/pull/1707
|
[#1707]: https://github.com/0glabs/0g-chain/pull/1707
|
||||||
[#1706]: https://github.com/Kava-Labs/kava/pull/1706
|
[#1706]: https://github.com/0glabs/0g-chain/pull/1706
|
||||||
[#1704]: https://github.com/Kava-Labs/kava/pull/1704
|
[#1704]: https://github.com/0glabs/0g-chain/pull/1704
|
||||||
[#1668]: https://github.com/Kava-Labs/kava/pull/1668
|
[#1668]: https://github.com/0glabs/0g-chain/pull/1668
|
||||||
[#1669]: https://github.com/Kava-Labs/kava/pull/1669
|
[#1669]: https://github.com/0glabs/0g-chain/pull/1669
|
||||||
[#1655]: https://github.com/Kava-Labs/kava/pull/1655
|
[#1655]: https://github.com/0glabs/0g-chain/pull/1655
|
||||||
[#1624]: https://github.com/Kava-Labs/kava/pull/1624
|
[#1624]: https://github.com/0glabs/0g-chain/pull/1624
|
||||||
[#1631]: https://github.com/Kava-Labs/kava/pull/1631
|
[#1631]: https://github.com/0glabs/0g-chain/pull/1631
|
||||||
[#1622]: https://github.com/Kava-Labs/kava/pull/1622
|
[#1622]: https://github.com/0glabs/0g-chain/pull/1622
|
||||||
[#1614]: https://github.com/Kava-Labs/kava/pull/1614
|
[#1614]: https://github.com/0glabs/0g-chain/pull/1614
|
||||||
[#1610]: https://github.com/Kava-Labs/kava/pull/1610
|
[#1610]: https://github.com/0glabs/0g-chain/pull/1610
|
||||||
[#1609]: https://github.com/Kava-Labs/kava/pull/1609
|
[#1609]: https://github.com/0glabs/0g-chain/pull/1609
|
||||||
[#1605]: https://github.com/Kava-Labs/kava/pull/1605
|
[#1605]: https://github.com/0glabs/0g-chain/pull/1605
|
||||||
[#1604]: https://github.com/Kava-Labs/kava/pull/1604
|
[#1604]: https://github.com/0glabs/0g-chain/pull/1604
|
||||||
[#1603]: https://github.com/Kava-Labs/kava/pull/1603
|
[#1603]: https://github.com/0glabs/0g-chain/pull/1603
|
||||||
[#1598]: https://github.com/Kava-Labs/kava/pull/1598
|
[#1598]: https://github.com/0glabs/0g-chain/pull/1598
|
||||||
[#1596]: https://github.com/Kava-Labs/kava/pull/1596
|
[#1596]: https://github.com/0glabs/0g-chain/pull/1596
|
||||||
[#1591]: https://github.com/Kava-Labs/kava/pull/1591
|
[#1591]: https://github.com/0glabs/0g-chain/pull/1591
|
||||||
[#1590]: https://github.com/Kava-Labs/kava/pull/1590
|
[#1590]: https://github.com/0glabs/0g-chain/pull/1590
|
||||||
[#1568]: https://github.com/Kava-Labs/kava/pull/1568
|
[#1568]: https://github.com/0glabs/0g-chain/pull/1568
|
||||||
[#1567]: https://github.com/Kava-Labs/kava/pull/1567
|
[#1567]: https://github.com/0glabs/0g-chain/pull/1567
|
||||||
[#1566]: https://github.com/Kava-Labs/kava/pull/1566
|
[#1566]: https://github.com/0glabs/0g-chain/pull/1566
|
||||||
[#1565]: https://github.com/Kava-Labs/kava/pull/1565
|
[#1565]: https://github.com/0glabs/0g-chain/pull/1565
|
||||||
[#1563]: https://github.com/Kava-Labs/kava/pull/1563
|
[#1563]: https://github.com/0glabs/0g-chain/pull/1563
|
||||||
[#1562]: https://github.com/Kava-Labs/kava/pull/1562
|
[#1562]: https://github.com/0glabs/0g-chain/pull/1562
|
||||||
[#1550]: https://github.com/Kava-Labs/kava/pull/1550
|
[#1550]: https://github.com/0glabs/0g-chain/pull/1550
|
||||||
[#1544]: https://github.com/Kava-Labs/kava/pull/1544
|
[#1544]: https://github.com/0glabs/0g-chain/pull/1544
|
||||||
[#1477]: https://github.com/Kava-Labs/kava/pull/1477
|
[#1477]: https://github.com/0glabs/0g-chain/pull/1477
|
||||||
[#1512]: https://github.com/Kava-Labs/kava/pull/1512
|
[#1512]: https://github.com/0glabs/0g-chain/pull/1512
|
||||||
[#1519]: https://github.com/Kava-Labs/kava/pull/1519
|
[#1519]: https://github.com/0glabs/0g-chain/pull/1519
|
||||||
[#1106]: https://github.com/Kava-Labs/kava/pull/1106
|
[#1106]: https://github.com/0glabs/0g-chain/pull/1106
|
||||||
[#1152]: https://github.com/Kava-Labs/kava/pull/1152
|
[#1152]: https://github.com/0glabs/0g-chain/pull/1152
|
||||||
[#1542]: https://github.com/Kava-Labs/kava/pull/1542
|
[#1542]: https://github.com/0glabs/0g-chain/pull/1542
|
||||||
[#253]: https://github.com/Kava-Labs/kava/pull/253
|
[#253]: https://github.com/0glabs/0g-chain/pull/253
|
||||||
[#260]: https://github.com/Kava-Labs/kava/pull/260
|
[#260]: https://github.com/0glabs/0g-chain/pull/260
|
||||||
[#266]: https://github.com/Kava-Labs/kava/pull/266
|
[#266]: https://github.com/0glabs/0g-chain/pull/266
|
||||||
[#364]: https://github.com/Kava-Labs/kava/pull/364
|
[#364]: https://github.com/0glabs/0g-chain/pull/364
|
||||||
[#590]: https://github.com/Kava-Labs/kava/pull/590
|
[#590]: https://github.com/0glabs/0g-chain/pull/590
|
||||||
[#591]: https://github.com/Kava-Labs/kava/pull/591
|
[#591]: https://github.com/0glabs/0g-chain/pull/591
|
||||||
[#596]: https://github.com/Kava-Labs/kava/pull/596
|
[#596]: https://github.com/0glabs/0g-chain/pull/596
|
||||||
[#598]: https://github.com/Kava-Labs/kava/pull/598
|
[#598]: https://github.com/0glabs/0g-chain/pull/598
|
||||||
[#625]: https://github.com/Kava-Labs/kava/pull/625
|
[#625]: https://github.com/0glabs/0g-chain/pull/625
|
||||||
[#701]: https://github.com/Kava-Labs/kava/pull/701
|
[#701]: https://github.com/0glabs/0g-chain/pull/701
|
||||||
[#750]: https://github.com/Kava-Labs/kava/pull/750
|
[#750]: https://github.com/0glabs/0g-chain/pull/750
|
||||||
[#751]: https://github.com/Kava-Labs/kava/pull/751
|
[#751]: https://github.com/0glabs/0g-chain/pull/751
|
||||||
[#780]: https://github.com/Kava-Labs/kava/pull/780
|
[#780]: https://github.com/0glabs/0g-chain/pull/780
|
||||||
[unreleased]: https://github.com/Kava-Labs/kava/compare/v0.26.1...release/v0.26.x
|
[unreleased]: https://github.com/0glabs/0g-chain/compare/v0.26.1...release/v0.26.x
|
||||||
[v0.26.1]: https://github.com/Kava-Labs/kava/compare/v0.26.1...v0.26.0
|
[v0.26.1]: https://github.com/0glabs/0g-chain/compare/v0.26.1...v0.26.0
|
||||||
[v0.26.0]: https://github.com/Kava-Labs/kava/compare/v0.26.0...v0.25.1
|
[v0.26.0]: https://github.com/0glabs/0g-chain/compare/v0.26.0...v0.25.1
|
||||||
[v0.25.0]: https://github.com/Kava-Labs/kava/compare/v0.25.0...v0.24.3
|
[v0.25.0]: https://github.com/0glabs/0g-chain/compare/v0.25.0...v0.24.3
|
||||||
[v0.24.3]: https://github.com/Kava-Labs/kava/compare/v0.24.3...v0.24.1
|
[v0.24.3]: https://github.com/0glabs/0g-chain/compare/v0.24.3...v0.24.1
|
||||||
[v0.24.1]: https://github.com/Kava-Labs/kava/compare/v0.24.1...v0.24.0
|
[v0.24.1]: https://github.com/0glabs/0g-chain/compare/v0.24.1...v0.24.0
|
||||||
[v0.24.0]: https://github.com/Kava-Labs/kava/compare/v0.24.0...v0.23.2
|
[v0.24.0]: https://github.com/0glabs/0g-chain/compare/v0.24.0...v0.23.2
|
||||||
[v0.23.2]: https://github.com/Kava-Labs/kava/compare/v0.23.1...v0.23.2
|
[v0.23.2]: https://github.com/0glabs/0g-chain/compare/v0.23.1...v0.23.2
|
||||||
[v0.23.0]: https://github.com/Kava-Labs/kava/compare/v0.21.1...v0.23.0
|
[v0.23.0]: https://github.com/0glabs/0g-chain/compare/v0.21.1...v0.23.0
|
||||||
[v0.16.1]: https://github.com/Kava-Labs/kava/compare/v0.16.0...v0.16.1
|
[v0.16.1]: https://github.com/0glabs/0g-chain/compare/v0.16.0...v0.16.1
|
||||||
[v0.16.0]: https://github.com/Kava-Labs/kava/compare/v0.15.2...v0.16.0
|
[v0.16.0]: https://github.com/0glabs/0g-chain/compare/v0.15.2...v0.16.0
|
||||||
[v0.13.0]: https://github.com/Kava-Labs/kava/compare/v0.12.4...v0.13.0
|
[v0.13.0]: https://github.com/0glabs/0g-chain/compare/v0.12.4...v0.13.0
|
||||||
[v0.12.0]: https://github.com/Kava-Labs/kava/compare/v0.11.1...v0.12.0
|
[v0.12.0]: https://github.com/0glabs/0g-chain/compare/v0.11.1...v0.12.0
|
||||||
[v0.11.0]: https://github.com/Kava-Labs/kava/compare/v0.10.0...v0.11.0
|
[v0.11.0]: https://github.com/0glabs/0g-chain/compare/v0.10.0...v0.11.0
|
||||||
[v0.8.1]: https://github.com/Kava-Labs/kava/compare/v0.8.0...v0.8.1
|
[v0.8.1]: https://github.com/0glabs/0g-chain/compare/v0.8.0...v0.8.1
|
||||||
[v0.8.0]: https://github.com/Kava-Labs/kava/compare/v0.7.0...v0.8.0
|
[v0.8.0]: https://github.com/0glabs/0g-chain/compare/v0.7.0...v0.8.0
|
||||||
[v0.3.5]: https://github.com/Kava-Labs/kava/compare/v0.3.4...v0.3.5
|
[v0.3.5]: https://github.com/0glabs/0g-chain/compare/v0.3.4...v0.3.5
|
||||||
[v0.3.2]: https://github.com/Kava-Labs/kava/compare/v0.3.1...v0.3.2
|
[v0.3.2]: https://github.com/0glabs/0g-chain/compare/v0.3.1...v0.3.2
|
||||||
[v0.3.1]: https://github.com/Kava-Labs/kava/compare/v0.3.0...v0.3.1
|
[v0.3.1]: https://github.com/0glabs/0g-chain/compare/v0.3.0...v0.3.1
|
||||||
[v0.3.0]: https://github.com/Kava-Labs/kava/compare/v0.2.0...v0.3.0
|
[v0.3.0]: https://github.com/0glabs/0g-chain/compare/v0.2.0...v0.3.0
|
||||||
|
@ -7,7 +7,7 @@ FROM golang:1.21-alpine AS build-env
|
|||||||
RUN apk add bash git make libc-dev gcc linux-headers eudev-dev jq curl
|
RUN apk add bash git make libc-dev gcc linux-headers eudev-dev jq curl
|
||||||
|
|
||||||
# Set working directory for the build
|
# Set working directory for the build
|
||||||
WORKDIR /root/kava
|
WORKDIR /root/0g-chain
|
||||||
# default home directory is /root
|
# default home directory is /root
|
||||||
|
|
||||||
# Copy dependency files first to facilitate dependency caching
|
# Copy dependency files first to facilitate dependency caching
|
||||||
@ -32,6 +32,6 @@ RUN --mount=type=cache,target=/root/.cache/go-build \
|
|||||||
FROM alpine:3.15
|
FROM alpine:3.15
|
||||||
|
|
||||||
RUN apk add bash jq curl
|
RUN apk add bash jq curl
|
||||||
COPY --from=build-env /go/bin/kava /bin/kava
|
COPY --from=build-env /go/bin/0gchaind /bin/0gchaind
|
||||||
|
|
||||||
CMD ["kava"]
|
CMD ["0gchaind"]
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM golang:1.21-bullseye AS kava-builder
|
FROM golang:1.21-bullseye AS chain-builder
|
||||||
|
|
||||||
# Set up dependencies
|
# Set up dependencies
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
@ -19,7 +19,7 @@ RUN git clone https://github.com/facebook/rocksdb.git \
|
|||||||
&& make -j$(nproc) install-shared \
|
&& make -j$(nproc) install-shared \
|
||||||
&& ldconfig
|
&& ldconfig
|
||||||
|
|
||||||
WORKDIR /root/kava
|
WORKDIR /root/0gchain
|
||||||
# Copy dependency files first to facilitate dependency caching
|
# Copy dependency files first to facilitate dependency caching
|
||||||
COPY ./go.mod ./
|
COPY ./go.mod ./
|
||||||
COPY ./go.sum ./
|
COPY ./go.sum ./
|
||||||
@ -32,13 +32,13 @@ RUN --mount=type=cache,target=/root/.cache/go-build \
|
|||||||
# Add source files
|
# Add source files
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
ARG kava_database_backend=rocksdb
|
ARG 0gchain_database_backend=rocksdb
|
||||||
ENV KAVA_DATABASE_BACKEND=$kava_database_backend
|
ENV 0GCHAIN_DATABASE_BACKEND=$0gchain_database_backend
|
||||||
|
|
||||||
# Mount go build and mod caches as container caches, persisted between builder invocations
|
# Mount go build and mod caches as container caches, persisted between builder invocations
|
||||||
RUN --mount=type=cache,target=/root/.cache/go-build \
|
RUN --mount=type=cache,target=/root/.cache/go-build \
|
||||||
--mount=type=cache,target=/go/pkg/mod \
|
--mount=type=cache,target=/go/pkg/mod \
|
||||||
make install COSMOS_BUILD_OPTIONS=$KAVA_DATABASE_BACKEND
|
make install COSMOS_BUILD_OPTIONS=$0GCHAIN_DATABASE_BACKEND
|
||||||
|
|
||||||
|
|
||||||
FROM ubuntu:22.04
|
FROM ubuntu:22.04
|
||||||
@ -48,10 +48,10 @@ RUN apt-get update \
|
|||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# copy rocksdb shared objects
|
# copy rocksdb shared objects
|
||||||
COPY --from=kava-builder /usr/local/lib/ /usr/local/lib/
|
COPY --from=chain-builder /usr/local/lib/ /usr/local/lib/
|
||||||
RUN ldconfig
|
RUN ldconfig
|
||||||
|
|
||||||
# copy kava binary
|
# copy 0g-chain binary
|
||||||
COPY --from=kava-builder /go/bin/kava /bin/kava
|
COPY --from=chain-builder /go/bin/0gchaind /bin/0gchaind
|
||||||
|
|
||||||
CMD ["kava"]
|
CMD ["0gchaind"]
|
||||||
|
45
Makefile
45
Makefile
@ -1,8 +1,10 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
### Project Info ###
|
### Project Info ###
|
||||||
################################################################################
|
################################################################################
|
||||||
PROJECT_NAME := kava# unique namespace for project
|
PROJECT_NAME := 0g-chain# unique namespace for project
|
||||||
|
BINARY_NAME := 0gchaind
|
||||||
|
MAIN_ENTRY := ./cmd/$(BINARY_NAME)
|
||||||
|
DOCKER_IMAGE_NAME := 0glabs/$(PROJECT_NAME)
|
||||||
GO_BIN ?= go
|
GO_BIN ?= go
|
||||||
|
|
||||||
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
|
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
|
||||||
@ -37,7 +39,7 @@ print-git-info:
|
|||||||
|
|
||||||
.PHONY: print-version
|
.PHONY: print-version
|
||||||
print-version:
|
print-version:
|
||||||
@echo "kava $(VERSION)\ntendermint $(TENDERMINT_VERSION)\ncosmos $(COSMOS_SDK_VERSION)"
|
@echo "$(BINARY_NAME) $(VERSION)\ntendermint $(TENDERMINT_VERSION)\ncosmos $(COSMOS_SDK_VERSION)"
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
### Project Settings ###
|
### Project Settings ###
|
||||||
@ -45,7 +47,7 @@ print-version:
|
|||||||
LEDGER_ENABLED ?= true
|
LEDGER_ENABLED ?= true
|
||||||
DOCKER:=docker
|
DOCKER:=docker
|
||||||
DOCKER_BUF := $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace bufbuild/buf
|
DOCKER_BUF := $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace bufbuild/buf
|
||||||
HTTPS_GIT := https://github.com/Kava-Labs/kava.git
|
HTTPS_GIT := https://github.com/0glabs/0g-chain.git
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
### Machine Info ###
|
### Machine Info ###
|
||||||
@ -76,7 +78,7 @@ print-machine-info:
|
|||||||
BUILD_DIR := build# build files
|
BUILD_DIR := build# build files
|
||||||
BIN_DIR := $(BUILD_DIR)/bin# for binary dev dependencies
|
BIN_DIR := $(BUILD_DIR)/bin# for binary dev dependencies
|
||||||
BUILD_CACHE_DIR := $(BUILD_DIR)/.cache# caching for non-artifact outputs
|
BUILD_CACHE_DIR := $(BUILD_DIR)/.cache# caching for non-artifact outputs
|
||||||
OUT_DIR := out# for artifact intermediates and outputs
|
OUT_DIR := ./.build# for artifact intermediates and outputs
|
||||||
|
|
||||||
ROOT_DIR := $(patsubst %/,%,$(dir $(abspath $(lastword $(MAKEFILE_LIST)))))# absolute path to root
|
ROOT_DIR := $(patsubst %/,%,$(dir $(abspath $(lastword $(MAKEFILE_LIST)))))# absolute path to root
|
||||||
export PATH := $(ROOT_DIR)/$(BIN_DIR):$(PATH)# add local bin first in path
|
export PATH := $(ROOT_DIR)/$(BIN_DIR):$(PATH)# add local bin first in path
|
||||||
@ -142,8 +144,8 @@ build_tags_comma_sep := $(subst $(whitespace),$(comma),$(build_tags))
|
|||||||
|
|
||||||
# process linker flags
|
# process linker flags
|
||||||
|
|
||||||
ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=kava \
|
ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=$(PROJECT_NAME) \
|
||||||
-X github.com/cosmos/cosmos-sdk/version.AppName=kava \
|
-X github.com/cosmos/cosmos-sdk/version.AppName=$(PROJECT_NAME) \
|
||||||
-X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION_NUMBER) \
|
-X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION_NUMBER) \
|
||||||
-X github.com/cosmos/cosmos-sdk/version.Commit=$(GIT_COMMIT) \
|
-X github.com/cosmos/cosmos-sdk/version.Commit=$(GIT_COMMIT) \
|
||||||
-X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)" \
|
-X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)" \
|
||||||
@ -188,16 +190,16 @@ all: install
|
|||||||
|
|
||||||
build: go.sum
|
build: go.sum
|
||||||
ifeq ($(OS), Windows_NT)
|
ifeq ($(OS), Windows_NT)
|
||||||
$(GO_BIN) build -mod=readonly $(BUILD_FLAGS) -o out/$(shell $(GO_BIN) env GOOS)/kava.exe ./cmd/kava
|
$(GO_BIN) build -mod=readonly $(BUILD_FLAGS) -o out/$(shell $(GO_BIN) env GOOS)/$(BINARY_NAME).exe $(MAIN_ENTRY)
|
||||||
else
|
else
|
||||||
$(GO_BIN) build -mod=readonly $(BUILD_FLAGS) -o out/$(shell $(GO_BIN) env GOOS)/kava ./cmd/kava
|
$(GO_BIN) build -mod=readonly $(BUILD_FLAGS) -o out/$(shell $(GO_BIN) env GOOS)/$(BINARY_NAME) $(MAIN_ENTRY)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
build-linux: go.sum
|
build-linux: go.sum
|
||||||
LEDGER_ENABLED=false GOOS=linux GOARCH=amd64 $(MAKE) build
|
LEDGER_ENABLED=false GOOS=linux GOARCH=amd64 $(MAKE) build
|
||||||
|
|
||||||
install: go.sum
|
install: go.sum
|
||||||
$(GO_BIN) install -mod=readonly $(BUILD_FLAGS) ./cmd/kava
|
$(GO_BIN) install -mod=readonly $(BUILD_FLAGS) $(MAIN_ENTRY)
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
### Tools & dependencies
|
### Tools & dependencies
|
||||||
@ -219,6 +221,7 @@ go.sum: go.mod
|
|||||||
# Set to exclude riot links as they trigger false positives
|
# Set to exclude riot links as they trigger false positives
|
||||||
link-check:
|
link-check:
|
||||||
@$(GO_BIN) get -u github.com/raviqqe/liche@f57a5d1c5be4856454cb26de155a65a4fd856ee3
|
@$(GO_BIN) get -u github.com/raviqqe/liche@f57a5d1c5be4856454cb26de155a65a4fd856ee3
|
||||||
|
# TODO: replace kava in following line with project name
|
||||||
liche -r . --exclude "^http://127.*|^https://riot.im/app*|^http://kava-testnet*|^https://testnet-dex*|^https://kava3.data.kava.io*|^https://ipfs.io*|^https://apps.apple.com*|^https://kava.quicksync.io*"
|
liche -r . --exclude "^http://127.*|^https://riot.im/app*|^http://kava-testnet*|^https://testnet-dex*|^https://kava3.data.kava.io*|^https://ipfs.io*|^https://apps.apple.com*|^https://kava.quicksync.io*"
|
||||||
|
|
||||||
|
|
||||||
@ -233,26 +236,26 @@ format:
|
|||||||
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' | xargs misspell -w
|
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' | xargs misspell -w
|
||||||
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' | xargs goimports -w -local github.com/tendermint
|
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' | xargs goimports -w -local github.com/tendermint
|
||||||
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' | xargs goimports -w -local github.com/cosmos/cosmos-sdk
|
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' | xargs goimports -w -local github.com/cosmos/cosmos-sdk
|
||||||
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' | xargs goimports -w -local github.com/kava-labs/kava
|
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' | xargs goimports -w -local github.com/0glabs/0g-chain
|
||||||
.PHONY: format
|
.PHONY: format
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
### Localnet ###
|
### Localnet ###
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
# Build docker image and tag as kava/kava:local
|
# Build docker image and tag as 0glabs/0g-chain:local
|
||||||
docker-build:
|
docker-build:
|
||||||
DOCKER_BUILDKIT=1 $(DOCKER) build -t kava/kava:local .
|
DOCKER_BUILDKIT=1 $(DOCKER) build -t $(DOCKER_IMAGE_NAME):local .
|
||||||
|
|
||||||
docker-build-rocksdb:
|
docker-build-rocksdb:
|
||||||
DOCKER_BUILDKIT=1 $(DOCKER) build -f Dockerfile-rocksdb -t kava/kava:local .
|
DOCKER_BUILDKIT=1 $(DOCKER) build -f Dockerfile-rocksdb -t $(DOCKER_IMAGE_NAME):local .
|
||||||
|
|
||||||
build-docker-local-kava:
|
build-docker-local-0gchain:
|
||||||
@$(MAKE) -C networks/local
|
@$(MAKE) -C networks/local
|
||||||
|
|
||||||
# Run a 4-node testnet locally
|
# Run a 4-node testnet locally
|
||||||
localnet-start: build-linux localnet-stop
|
localnet-start: build-linux localnet-stop
|
||||||
@if ! [ -f build/node0/kvd/config/genesis.json ]; then docker run --rm -v $(CURDIR)/build:/kvd:Z kava/kavanode testnet --v 4 -o . --starting-ip-address 192.168.10.2 --keyring-backend=test ; fi
|
@if ! [ -f build/node0/kvd/config/genesis.json ]; then docker run --rm -v $(CURDIR)/build:/kvd:Z $(DOCKER_IMAGE_NAME)-node testnet --v 4 -o . --starting-ip-address 192.168.10.2 --keyring-backend=test ; fi
|
||||||
docker-compose up -d
|
docker-compose up -d
|
||||||
|
|
||||||
localnet-stop:
|
localnet-stop:
|
||||||
@ -261,7 +264,7 @@ localnet-stop:
|
|||||||
# Launch a new single validator chain
|
# Launch a new single validator chain
|
||||||
start:
|
start:
|
||||||
./contrib/devnet/init-new-chain.sh
|
./contrib/devnet/init-new-chain.sh
|
||||||
kava start
|
$(BINARY_NAME) start
|
||||||
|
|
||||||
#proto-format:
|
#proto-format:
|
||||||
#@echo "Formatting Protobuf files"
|
#@echo "Formatting Protobuf files"
|
||||||
@ -302,7 +305,7 @@ test:
|
|||||||
@$(GO_BIN) test $$($(GO_BIN) list ./... | grep -v 'contrib' | grep -v 'tests/e2e')
|
@$(GO_BIN) test $$($(GO_BIN) list ./... | grep -v 'contrib' | grep -v 'tests/e2e')
|
||||||
|
|
||||||
test-rocksdb:
|
test-rocksdb:
|
||||||
@go test -tags=rocksdb ./cmd/kava/opendb
|
@go test -tags=rocksdb $(MAIN_ENTRY)/opendb
|
||||||
|
|
||||||
# Run cli integration tests
|
# Run cli integration tests
|
||||||
# `-p 4` to use 4 cores, `-tags cli_test` to tell $(GO_BIN) not to ignore the cli package
|
# `-p 4` to use 4 cores, `-tags cli_test` to tell $(GO_BIN) not to ignore the cli package
|
||||||
@ -318,15 +321,15 @@ test-migrate:
|
|||||||
# This submits an AWS Batch job to run a lot of sims, each within a docker image. Results are uploaded to S3
|
# This submits an AWS Batch job to run a lot of sims, each within a docker image. Results are uploaded to S3
|
||||||
start-remote-sims:
|
start-remote-sims:
|
||||||
# build the image used for running sims in, and tag it
|
# build the image used for running sims in, and tag it
|
||||||
docker build -f simulations/Dockerfile -t kava/kava-sim:master .
|
docker build -f simulations/Dockerfile -t $(DOCKER_IMAGE_NAME)-sim:master .
|
||||||
# push that image to the hub
|
# push that image to the hub
|
||||||
docker push kava/kava-sim:master
|
docker push $(DOCKER_IMAGE_NAME)-sim:master
|
||||||
# submit an array job on AWS Batch, using 1000 seeds, spot instances
|
# submit an array job on AWS Batch, using 1000 seeds, spot instances
|
||||||
aws batch submit-job \
|
aws batch submit-job \
|
||||||
-—job-name "master-$(VERSION)" \
|
-—job-name "master-$(VERSION)" \
|
||||||
-—job-queue “simulation-1-queue-spot" \
|
-—job-queue “simulation-1-queue-spot" \
|
||||||
-—array-properties size=1000 \
|
-—array-properties size=1000 \
|
||||||
-—job-definition kava-sim-master \
|
-—job-definition $(BINARY_NAME)-sim-master \
|
||||||
-—container-override environment=[{SIM_NAME=master-$(VERSION)}]
|
-—container-override environment=[{SIM_NAME=master-$(VERSION)}]
|
||||||
|
|
||||||
update-kvtool:
|
update-kvtool:
|
||||||
|
24
README.md
24
README.md
@ -1,27 +1,20 @@
|
|||||||
|
<!---
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="./kava-logo.svg" width="300">
|
<img src="./0g-logo.svg" width="300">
|
||||||
</p>
|
</p>
|
||||||
|
--->
|
||||||
|
|
||||||
|
# 0G Chain
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
[![version](https://img.shields.io/github/tag/kava-labs/kava.svg)](https://github.com/kava-labs/kava/releases/latest)
|
### [Telegram](https://t.me/web3_0glabs) | [Discord](https://discord.com/invite/0glabs)
|
||||||
[![CircleCI](https://circleci.com/gh/Kava-Labs/kava/tree/master.svg?style=shield)](https://circleci.com/gh/Kava-Labs/kava/tree/master)
|
|
||||||
[![Go Report Card](https://goreportcard.com/badge/github.com/kava-labs/kava)](https://goreportcard.com/report/github.com/kava-labs/kava)
|
|
||||||
[![API Reference](https://godoc.org/github.com/Kava-Labs/kava?status.svg)](https://godoc.org/github.com/Kava-Labs/kava)
|
|
||||||
[![GitHub](https://img.shields.io/github/license/kava-labs/kava.svg)](https://github.com/Kava-Labs/kava/blob/master/LICENSE.md)
|
|
||||||
[![Twitter Follow](https://img.shields.io/twitter/follow/KAVA_CHAIN.svg?label=Follow&style=social)](https://twitter.com/KAVA_CHAIN)
|
|
||||||
[![Discord Chat](https://img.shields.io/discord/704389840614981673.svg)](https://discord.com/invite/kQzh3Uv)
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div align="center">
|
Reference implementation of 0G Chain, the first modular AI chain. Built using the [cosmos-sdk](https://github.com/cosmos/cosmos-sdk).
|
||||||
|
|
||||||
### [Telegram](https://t.me/kavalabs) | [Medium](https://medium.com/kava-labs) | [Discord](https://discord.gg/JJYnuCx)
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
Reference implementation of Kava, a blockchain for cross-chain DeFi. Built using the [cosmos-sdk](https://github.com/cosmos/cosmos-sdk).
|
|
||||||
|
|
||||||
|
<!---
|
||||||
## Mainnet
|
## Mainnet
|
||||||
|
|
||||||
The current recommended version of the software for mainnet is [v0.25.0](https://github.com/Kava-Labs/kava/releases/tag/v0.25.0) The master branch of this repository often contains considerable development work since the last mainnet release and is __not__ runnable on mainnet.
|
The current recommended version of the software for mainnet is [v0.25.0](https://github.com/Kava-Labs/kava/releases/tag/v0.25.0) The master branch of this repository often contains considerable development work since the last mainnet release and is __not__ runnable on mainnet.
|
||||||
@ -63,3 +56,4 @@ If you find a security issue, please report it to security [at] kava.io. Dependi
|
|||||||
Copyright © Kava Labs, Inc. All rights reserved.
|
Copyright © Kava Labs, Inc. All rights reserved.
|
||||||
|
|
||||||
Licensed under the [Apache v2 License](LICENSE.md).
|
Licensed under the [Apache v2 License](LICENSE.md).
|
||||||
|
--->
|
@ -32,15 +32,10 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/x/staking"
|
"github.com/cosmos/cosmos-sdk/x/staking"
|
||||||
"github.com/cosmos/cosmos-sdk/x/supply"
|
"github.com/cosmos/cosmos-sdk/x/supply"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/x/auction"
|
"github.com/0glabs/0g-chain/x/bep3"
|
||||||
"github.com/kava-labs/kava/x/bep3"
|
"github.com/0glabs/0g-chain/x/committee"
|
||||||
"github.com/kava-labs/kava/x/cdp"
|
"github.com/0glabs/0g-chain/x/pricefeed"
|
||||||
"github.com/kava-labs/kava/x/committee"
|
validatorvesting "github.com/0glabs/0g-chain/x/validator-vesting"
|
||||||
"github.com/kava-labs/kava/x/incentive"
|
|
||||||
"github.com/kava-labs/kava/x/kavadist"
|
|
||||||
"github.com/kava-labs/kava/x/pricefeed"
|
|
||||||
"github.com/kava-labs/kava/x/swap"
|
|
||||||
validatorvesting "github.com/kava-labs/kava/x/validator-vesting"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type StoreKeysPrefixes struct {
|
type StoreKeysPrefixes struct {
|
||||||
|
@ -9,7 +9,8 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
sdkmath "cosmossdk.io/math"
|
sdkmath "cosmossdk.io/math"
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/app"
|
||||||
|
"github.com/0glabs/0g-chain/chaincfg"
|
||||||
|
|
||||||
abci "github.com/cometbft/cometbft/abci/types"
|
abci "github.com/cometbft/cometbft/abci/types"
|
||||||
tmbytes "github.com/cometbft/cometbft/libs/bytes"
|
tmbytes "github.com/cometbft/cometbft/libs/bytes"
|
||||||
@ -52,9 +53,9 @@ func (suite *SimulateRequestTestSuite) TearDownTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *SimulateRequestTestSuite) TestSimulateRequest() {
|
func (suite *SimulateRequestTestSuite) TestSimulateRequest() {
|
||||||
fromAddr, err := sdk.AccAddressFromBech32("kava1esagqd83rhqdtpy5sxhklaxgn58k2m3s3mnpea")
|
fromAddr, err := sdk.AccAddressFromBech32("0g1esagqd83rhqdtpy5sxhklaxgn58k2m3s3mnpea")
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
toAddr, err := sdk.AccAddressFromBech32("kava1mq9qxlhze029lm0frzw2xr6hem8c3k9ts54w0w")
|
toAddr, err := sdk.AccAddressFromBech32("0g1mq9qxlhze029lm0frzw2xr6hem8c3k9ts54w0w")
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
|
|
||||||
simRequest := app.SimulateRequest{
|
simRequest := app.SimulateRequest{
|
||||||
@ -62,11 +63,11 @@ func (suite *SimulateRequestTestSuite) TestSimulateRequest() {
|
|||||||
bank.MsgSend{
|
bank.MsgSend{
|
||||||
FromAddress: fromAddr,
|
FromAddress: fromAddr,
|
||||||
ToAddress: toAddr,
|
ToAddress: toAddr,
|
||||||
Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
|
Amount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(1e6)),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Fee: auth.StdFee{
|
Fee: auth.StdFee{
|
||||||
Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(5e4))),
|
Amount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(5e4)),
|
||||||
Gas: 1e6,
|
Gas: 1e6,
|
||||||
},
|
},
|
||||||
Memo: "test memo",
|
Memo: "test memo",
|
||||||
|
@ -22,13 +22,14 @@ import (
|
|||||||
evmtypes "github.com/evmos/ethermint/x/evm/types"
|
evmtypes "github.com/evmos/ethermint/x/evm/types"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/app"
|
||||||
bep3types "github.com/kava-labs/kava/x/bep3/types"
|
"github.com/0glabs/0g-chain/chaincfg"
|
||||||
pricefeedtypes "github.com/kava-labs/kava/x/pricefeed/types"
|
bep3types "github.com/0glabs/0g-chain/x/bep3/types"
|
||||||
|
pricefeedtypes "github.com/0glabs/0g-chain/x/pricefeed/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
app.SetSDKConfig()
|
chaincfg.SetSDKConfig()
|
||||||
os.Exit(m.Run())
|
os.Exit(m.Run())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,7 +54,7 @@ func TestAppAnteHandler_AuthorizedMempool(t *testing.T) {
|
|||||||
App: *app.NewApp(
|
App: *app.NewApp(
|
||||||
log.NewNopLogger(),
|
log.NewNopLogger(),
|
||||||
tmdb.NewMemDB(),
|
tmdb.NewMemDB(),
|
||||||
app.DefaultNodeHome,
|
chaincfg.DefaultNodeHome,
|
||||||
nil,
|
nil,
|
||||||
encodingConfig,
|
encodingConfig,
|
||||||
opts,
|
opts,
|
||||||
@ -67,7 +68,7 @@ func TestAppAnteHandler_AuthorizedMempool(t *testing.T) {
|
|||||||
chainID,
|
chainID,
|
||||||
app.NewFundedGenStateWithSameCoins(
|
app.NewFundedGenStateWithSameCoins(
|
||||||
tApp.AppCodec(),
|
tApp.AppCodec(),
|
||||||
sdk.NewCoins(sdk.NewInt64Coin("ukava", 1e9)),
|
sdk.NewCoins(chaincfg.MakeCoinForGasDenom(1e9)),
|
||||||
testAddresses,
|
testAddresses,
|
||||||
),
|
),
|
||||||
newBep3GenStateMulti(tApp.AppCodec(), deputy),
|
newBep3GenStateMulti(tApp.AppCodec(), deputy),
|
||||||
@ -115,7 +116,7 @@ func TestAppAnteHandler_AuthorizedMempool(t *testing.T) {
|
|||||||
banktypes.NewMsgSend(
|
banktypes.NewMsgSend(
|
||||||
tc.address,
|
tc.address,
|
||||||
testAddresses[0],
|
testAddresses[0],
|
||||||
sdk.NewCoins(sdk.NewInt64Coin("ukava", 1_000_000)),
|
sdk.NewCoins(chaincfg.MakeCoinForGasDenom(1_000_000)),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
sdk.NewCoins(), // no fee
|
sdk.NewCoins(), // no fee
|
||||||
|
@ -10,8 +10,9 @@ import (
|
|||||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/app"
|
||||||
"github.com/kava-labs/kava/app/ante"
|
"github.com/0glabs/0g-chain/app/ante"
|
||||||
|
"github.com/0glabs/0g-chain/chaincfg"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ sdk.AnteHandler = (&MockAnteHandler{}).AnteHandle
|
var _ sdk.AnteHandler = (&MockAnteHandler{}).AnteHandle
|
||||||
@ -45,7 +46,7 @@ func TestAuthenticatedMempoolDecorator_AnteHandle_NotCheckTx(t *testing.T) {
|
|||||||
banktypes.NewMsgSend(
|
banktypes.NewMsgSend(
|
||||||
testAddresses[0],
|
testAddresses[0],
|
||||||
testAddresses[1],
|
testAddresses[1],
|
||||||
sdk.NewCoins(sdk.NewInt64Coin("ukava", 100_000_000)),
|
sdk.NewCoins(chaincfg.MakeCoinForGasDenom(100_000_000)),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
sdk.NewCoins(), // no fee
|
sdk.NewCoins(), // no fee
|
||||||
@ -80,12 +81,12 @@ func TestAuthenticatedMempoolDecorator_AnteHandle_Pass(t *testing.T) {
|
|||||||
banktypes.NewMsgSend(
|
banktypes.NewMsgSend(
|
||||||
testAddresses[0],
|
testAddresses[0],
|
||||||
testAddresses[1],
|
testAddresses[1],
|
||||||
sdk.NewCoins(sdk.NewInt64Coin("ukava", 100_000_000)),
|
sdk.NewCoins(chaincfg.MakeCoinForGasDenom(100)),
|
||||||
),
|
),
|
||||||
banktypes.NewMsgSend(
|
banktypes.NewMsgSend(
|
||||||
testAddresses[2],
|
testAddresses[2],
|
||||||
testAddresses[1],
|
testAddresses[1],
|
||||||
sdk.NewCoins(sdk.NewInt64Coin("ukava", 100_000_000)),
|
sdk.NewCoins(chaincfg.MakeCoinForGasDenom(100)),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
sdk.NewCoins(), // no fee
|
sdk.NewCoins(), // no fee
|
||||||
@ -121,7 +122,7 @@ func TestAuthenticatedMempoolDecorator_AnteHandle_Reject(t *testing.T) {
|
|||||||
banktypes.NewMsgSend(
|
banktypes.NewMsgSend(
|
||||||
testAddresses[0],
|
testAddresses[0],
|
||||||
testAddresses[1],
|
testAddresses[1],
|
||||||
sdk.NewCoins(sdk.NewInt64Coin("ukava", 100_000_000)),
|
sdk.NewCoins(chaincfg.MakeCoinForGasDenom(100)),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
sdk.NewCoins(), // no fee
|
sdk.NewCoins(), // no fee
|
||||||
|
@ -14,8 +14,9 @@ import (
|
|||||||
evmtypes "github.com/evmos/ethermint/x/evm/types"
|
evmtypes "github.com/evmos/ethermint/x/evm/types"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/app"
|
||||||
"github.com/kava-labs/kava/app/ante"
|
"github.com/0glabs/0g-chain/app/ante"
|
||||||
|
"github.com/0glabs/0g-chain/chaincfg"
|
||||||
)
|
)
|
||||||
|
|
||||||
func newMsgGrant(granter sdk.AccAddress, grantee sdk.AccAddress, a authz.Authorization, expiration time.Time) *authz.MsgGrant {
|
func newMsgGrant(granter sdk.AccAddress, grantee sdk.AccAddress, a authz.Authorization, expiration time.Time) *authz.MsgGrant {
|
||||||
@ -58,7 +59,7 @@ func TestAuthzLimiterDecorator(t *testing.T) {
|
|||||||
banktypes.NewMsgSend(
|
banktypes.NewMsgSend(
|
||||||
testAddresses[0],
|
testAddresses[0],
|
||||||
testAddresses[1],
|
testAddresses[1],
|
||||||
sdk.NewCoins(sdk.NewInt64Coin("ukava", 100e6)),
|
sdk.NewCoins(chaincfg.MakeCoinForGasDenom(100e6)),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
checkTx: false,
|
checkTx: false,
|
||||||
@ -128,7 +129,7 @@ func TestAuthzLimiterDecorator(t *testing.T) {
|
|||||||
[]sdk.Msg{banktypes.NewMsgSend(
|
[]sdk.Msg{banktypes.NewMsgSend(
|
||||||
testAddresses[0],
|
testAddresses[0],
|
||||||
testAddresses[3],
|
testAddresses[3],
|
||||||
sdk.NewCoins(sdk.NewInt64Coin("ukava", 100e6)),
|
sdk.NewCoins(chaincfg.MakeCoinForGasDenom(100e6)),
|
||||||
)}),
|
)}),
|
||||||
},
|
},
|
||||||
checkTx: false,
|
checkTx: false,
|
||||||
@ -161,7 +162,7 @@ func TestAuthzLimiterDecorator(t *testing.T) {
|
|||||||
banktypes.NewMsgSend(
|
banktypes.NewMsgSend(
|
||||||
testAddresses[0],
|
testAddresses[0],
|
||||||
testAddresses[3],
|
testAddresses[3],
|
||||||
sdk.NewCoins(sdk.NewInt64Coin("ukava", 100e6)),
|
sdk.NewCoins(chaincfg.MakeCoinForGasDenom(100e6)),
|
||||||
),
|
),
|
||||||
&evmtypes.MsgEthereumTx{},
|
&evmtypes.MsgEthereumTx{},
|
||||||
},
|
},
|
||||||
|
@ -33,13 +33,12 @@ import (
|
|||||||
feemarkettypes "github.com/evmos/ethermint/x/feemarket/types"
|
feemarkettypes "github.com/evmos/ethermint/x/feemarket/types"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/app"
|
||||||
cdptypes "github.com/kava-labs/kava/x/cdp/types"
|
"github.com/0glabs/0g-chain/chaincfg"
|
||||||
evmutilkeeper "github.com/kava-labs/kava/x/evmutil/keeper"
|
evmutilkeeper "github.com/0glabs/0g-chain/x/evmutil/keeper"
|
||||||
evmutiltestutil "github.com/kava-labs/kava/x/evmutil/testutil"
|
evmutiltestutil "github.com/0glabs/0g-chain/x/evmutil/testutil"
|
||||||
evmutiltypes "github.com/kava-labs/kava/x/evmutil/types"
|
evmutiltypes "github.com/0glabs/0g-chain/x/evmutil/types"
|
||||||
hardtypes "github.com/kava-labs/kava/x/hard/types"
|
pricefeedtypes "github.com/0glabs/0g-chain/x/pricefeed/types"
|
||||||
pricefeedtypes "github.com/kava-labs/kava/x/pricefeed/types"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -138,7 +137,6 @@ func (suite *EIP712TestSuite) createTestEIP712CosmosTxBuilder(
|
|||||||
func (suite *EIP712TestSuite) SetupTest() {
|
func (suite *EIP712TestSuite) SetupTest() {
|
||||||
tApp := app.NewTestApp()
|
tApp := app.NewTestApp()
|
||||||
suite.tApp = tApp
|
suite.tApp = tApp
|
||||||
|
|
||||||
cdc := tApp.AppCodec()
|
cdc := tApp.AppCodec()
|
||||||
suite.evmutilKeeper = tApp.GetEvmutilKeeper()
|
suite.evmutilKeeper = tApp.GetEvmutilKeeper()
|
||||||
|
|
||||||
@ -158,7 +156,7 @@ func (suite *EIP712TestSuite) SetupTest() {
|
|||||||
// Genesis states
|
// Genesis states
|
||||||
evmGs := evmtypes.NewGenesisState(
|
evmGs := evmtypes.NewGenesisState(
|
||||||
evmtypes.NewParams(
|
evmtypes.NewParams(
|
||||||
"akava", // evmDenom
|
chaincfg.EvmDenom, // evmDenom
|
||||||
false, // allowedUnprotectedTxs
|
false, // allowedUnprotectedTxs
|
||||||
true, // enableCreate
|
true, // enableCreate
|
||||||
true, // enableCall
|
true, // enableCall
|
||||||
@ -173,47 +171,6 @@ func (suite *EIP712TestSuite) SetupTest() {
|
|||||||
feemarketGenesis.Params.EnableHeight = 1
|
feemarketGenesis.Params.EnableHeight = 1
|
||||||
feemarketGenesis.Params.NoBaseFee = false
|
feemarketGenesis.Params.NoBaseFee = false
|
||||||
|
|
||||||
cdpGenState := cdptypes.DefaultGenesisState()
|
|
||||||
cdpGenState.Params.GlobalDebtLimit = sdk.NewInt64Coin("usdx", 53000000000000)
|
|
||||||
cdpGenState.Params.CollateralParams = cdptypes.CollateralParams{
|
|
||||||
{
|
|
||||||
Denom: USDCCoinDenom,
|
|
||||||
Type: USDCCDPType,
|
|
||||||
LiquidationRatio: sdk.MustNewDecFromStr("1.01"),
|
|
||||||
DebtLimit: sdk.NewInt64Coin("usdx", 500000000000),
|
|
||||||
StabilityFee: sdk.OneDec(),
|
|
||||||
AuctionSize: sdkmath.NewIntFromUint64(10000000000),
|
|
||||||
LiquidationPenalty: sdk.MustNewDecFromStr("0.05"),
|
|
||||||
CheckCollateralizationIndexCount: sdkmath.NewInt(10),
|
|
||||||
KeeperRewardPercentage: sdk.MustNewDecFromStr("0.01"),
|
|
||||||
SpotMarketID: "usdc:usd",
|
|
||||||
LiquidationMarketID: "usdc:usd:30",
|
|
||||||
ConversionFactor: sdkmath.NewInt(18),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
hardGenState := hardtypes.DefaultGenesisState()
|
|
||||||
hardGenState.Params.MoneyMarkets = []hardtypes.MoneyMarket{
|
|
||||||
{
|
|
||||||
Denom: "usdx",
|
|
||||||
BorrowLimit: hardtypes.BorrowLimit{
|
|
||||||
HasMaxLimit: true,
|
|
||||||
MaximumLimit: sdk.MustNewDecFromStr("100000000000"),
|
|
||||||
LoanToValue: sdk.MustNewDecFromStr("1"),
|
|
||||||
},
|
|
||||||
SpotMarketID: "usdx:usd",
|
|
||||||
ConversionFactor: sdkmath.NewInt(1_000_000),
|
|
||||||
InterestRateModel: hardtypes.InterestRateModel{
|
|
||||||
BaseRateAPY: sdk.MustNewDecFromStr("0.05"),
|
|
||||||
BaseMultiplier: sdk.MustNewDecFromStr("2"),
|
|
||||||
Kink: sdk.MustNewDecFromStr("0.8"),
|
|
||||||
JumpMultiplier: sdk.MustNewDecFromStr("10"),
|
|
||||||
},
|
|
||||||
ReserveFactor: sdk.MustNewDecFromStr("0.05"),
|
|
||||||
KeeperRewardPercentage: sdk.ZeroDec(),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
pricefeedGenState := pricefeedtypes.DefaultGenesisState()
|
pricefeedGenState := pricefeedtypes.DefaultGenesisState()
|
||||||
pricefeedGenState.Params.Markets = []pricefeedtypes.Market{
|
pricefeedGenState.Params.Markets = []pricefeedtypes.Market{
|
||||||
{
|
{
|
||||||
@ -262,15 +219,13 @@ func (suite *EIP712TestSuite) SetupTest() {
|
|||||||
genState := app.GenesisState{
|
genState := app.GenesisState{
|
||||||
evmtypes.ModuleName: cdc.MustMarshalJSON(evmGs),
|
evmtypes.ModuleName: cdc.MustMarshalJSON(evmGs),
|
||||||
feemarkettypes.ModuleName: cdc.MustMarshalJSON(feemarketGenesis),
|
feemarkettypes.ModuleName: cdc.MustMarshalJSON(feemarketGenesis),
|
||||||
cdptypes.ModuleName: cdc.MustMarshalJSON(&cdpGenState),
|
|
||||||
hardtypes.ModuleName: cdc.MustMarshalJSON(&hardGenState),
|
|
||||||
pricefeedtypes.ModuleName: cdc.MustMarshalJSON(&pricefeedGenState),
|
pricefeedtypes.ModuleName: cdc.MustMarshalJSON(&pricefeedGenState),
|
||||||
}
|
}
|
||||||
|
|
||||||
// funds our test accounts with some ukava
|
// funds our test accounts with some gas denom
|
||||||
coinsGenState := app.NewFundedGenStateWithSameCoins(
|
coinsGenState := app.NewFundedGenStateWithSameCoins(
|
||||||
tApp.AppCodec(),
|
tApp.AppCodec(),
|
||||||
sdk.NewCoins(sdk.NewInt64Coin("ukava", 1e9)),
|
sdk.NewCoins(chaincfg.MakeCoinForGasDenom(1e9)),
|
||||||
[]sdk.AccAddress{suite.testAddr, suite.testAddr2},
|
[]sdk.AccAddress{suite.testAddr, suite.testAddr2},
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -357,45 +312,17 @@ func (suite *EIP712TestSuite) SetupTest() {
|
|||||||
params := evmKeeper.GetParams(suite.ctx)
|
params := evmKeeper.GetParams(suite.ctx)
|
||||||
params.EIP712AllowedMsgs = []evmtypes.EIP712AllowedMsg{
|
params.EIP712AllowedMsgs = []evmtypes.EIP712AllowedMsg{
|
||||||
{
|
{
|
||||||
MsgTypeUrl: "/kava.evmutil.v1beta1.MsgConvertERC20ToCoin",
|
MsgTypeUrl: "/zgc.evmutil.v1beta1.MsgConvertERC20ToCoin",
|
||||||
MsgValueTypeName: "MsgValueEVMConvertERC20ToCoin",
|
MsgValueTypeName: "MsgValueEVMConvertERC20ToCoin",
|
||||||
ValueTypes: []evmtypes.EIP712MsgAttrType{
|
ValueTypes: []evmtypes.EIP712MsgAttrType{
|
||||||
{Name: "initiator", Type: "string"},
|
{Name: "initiator", Type: "string"},
|
||||||
{Name: "receiver", Type: "string"},
|
{Name: "receiver", Type: "string"},
|
||||||
{Name: "kava_erc20_address", Type: "string"},
|
{Name: "zgchain_erc20_address", Type: "string"},
|
||||||
{Name: "amount", Type: "string"},
|
{Name: "amount", Type: "string"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MsgTypeUrl: "/kava.cdp.v1beta1.MsgCreateCDP",
|
MsgTypeUrl: "/zgc.evmutil.v1beta1.MsgConvertCoinToERC20",
|
||||||
MsgValueTypeName: "MsgValueCDPCreate",
|
|
||||||
ValueTypes: []evmtypes.EIP712MsgAttrType{
|
|
||||||
{Name: "sender", Type: "string"},
|
|
||||||
{Name: "collateral", Type: "Coin"},
|
|
||||||
{Name: "principal", Type: "Coin"},
|
|
||||||
{Name: "collateral_type", Type: "string"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
MsgTypeUrl: "/kava.cdp.v1beta1.MsgDeposit",
|
|
||||||
MsgValueTypeName: "MsgValueCDPDeposit",
|
|
||||||
ValueTypes: []evmtypes.EIP712MsgAttrType{
|
|
||||||
{Name: "depositor", Type: "string"},
|
|
||||||
{Name: "owner", Type: "string"},
|
|
||||||
{Name: "collateral", Type: "Coin"},
|
|
||||||
{Name: "collateral_type", Type: "string"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
MsgTypeUrl: "/kava.hard.v1beta1.MsgDeposit",
|
|
||||||
MsgValueTypeName: "MsgValueHardDeposit",
|
|
||||||
ValueTypes: []evmtypes.EIP712MsgAttrType{
|
|
||||||
{Name: "depositor", Type: "string"},
|
|
||||||
{Name: "amount", Type: "Coin[]"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
MsgTypeUrl: "/kava.evmutil.v1beta1.MsgConvertCoinToERC20",
|
|
||||||
MsgValueTypeName: "MsgValueEVMConvertCoinToERC20",
|
MsgValueTypeName: "MsgValueEVMConvertCoinToERC20",
|
||||||
ValueTypes: []evmtypes.EIP712MsgAttrType{
|
ValueTypes: []evmtypes.EIP712MsgAttrType{
|
||||||
{Name: "initiator", Type: "string"},
|
{Name: "initiator", Type: "string"},
|
||||||
@ -403,23 +330,6 @@ func (suite *EIP712TestSuite) SetupTest() {
|
|||||||
{Name: "amount", Type: "Coin"},
|
{Name: "amount", Type: "Coin"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
MsgTypeUrl: "/kava.cdp.v1beta1.MsgRepayDebt",
|
|
||||||
MsgValueTypeName: "MsgValueCDPRepayDebt",
|
|
||||||
ValueTypes: []evmtypes.EIP712MsgAttrType{
|
|
||||||
{Name: "sender", Type: "string"},
|
|
||||||
{Name: "collateral_type", Type: "string"},
|
|
||||||
{Name: "payment", Type: "Coin"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
MsgTypeUrl: "/kava.hard.v1beta1.MsgWithdraw",
|
|
||||||
MsgValueTypeName: "MsgValueHardWithdraw",
|
|
||||||
ValueTypes: []evmtypes.EIP712MsgAttrType{
|
|
||||||
{Name: "depositor", Type: "string"},
|
|
||||||
{Name: "amount", Type: "Coin[]"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
evmKeeper.SetParams(suite.ctx, params)
|
evmKeeper.SetParams(suite.ctx, params)
|
||||||
|
|
||||||
@ -465,7 +375,7 @@ func (suite *EIP712TestSuite) deployUSDCERC20(app app.TestApp, ctx sdk.Context)
|
|||||||
suite.tApp.FundModuleAccount(
|
suite.tApp.FundModuleAccount(
|
||||||
suite.ctx,
|
suite.ctx,
|
||||||
evmutiltypes.ModuleName,
|
evmutiltypes.ModuleName,
|
||||||
sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(0))),
|
sdk.NewCoins(chaincfg.MakeCoinForGasDenom(0)),
|
||||||
)
|
)
|
||||||
|
|
||||||
contractAddr, err := suite.evmutilKeeper.DeployTestMintableERC20Contract(suite.ctx, "USDC", "USDC", uint8(18))
|
contractAddr, err := suite.evmutilKeeper.DeployTestMintableERC20Contract(suite.ctx, "USDC", "USDC", uint8(18))
|
||||||
@ -487,40 +397,43 @@ func (suite *EIP712TestSuite) TestEIP712Tx() {
|
|||||||
failCheckTx bool
|
failCheckTx bool
|
||||||
errMsg string
|
errMsg string
|
||||||
}{
|
}{
|
||||||
{
|
// TODO: need fix
|
||||||
name: "processes deposit eip712 messages successfully",
|
// {
|
||||||
usdcDepositAmt: 100,
|
// name: "processes deposit eip712 messages successfully",
|
||||||
usdxToMintAmt: 99,
|
// usdcDepositAmt: 100,
|
||||||
},
|
// usdxToMintAmt: 99,
|
||||||
|
// },
|
||||||
{
|
{
|
||||||
name: "fails when convertion more erc20 usdc than balance",
|
name: "fails when convertion more erc20 usdc than balance",
|
||||||
usdcDepositAmt: 51_000,
|
usdcDepositAmt: 51_000,
|
||||||
usdxToMintAmt: 100,
|
usdxToMintAmt: 100,
|
||||||
errMsg: "transfer amount exceeds balance",
|
errMsg: "transfer amount exceeds balance",
|
||||||
},
|
},
|
||||||
{
|
// TODO: need fix
|
||||||
name: "fails when minting more usdx than allowed",
|
// {
|
||||||
usdcDepositAmt: 100,
|
// name: "fails when minting more usdx than allowed",
|
||||||
usdxToMintAmt: 100,
|
// usdcDepositAmt: 100,
|
||||||
errMsg: "proposed collateral ratio is below liquidation ratio",
|
// usdxToMintAmt: 100,
|
||||||
},
|
// errMsg: "proposed collateral ratio is below liquidation ratio",
|
||||||
{
|
// },
|
||||||
name: "fails when trying to convert usdc for another address",
|
// TODO: need fix
|
||||||
usdcDepositAmt: 100,
|
// {
|
||||||
usdxToMintAmt: 90,
|
// name: "fails when trying to convert usdc for another address",
|
||||||
errMsg: "unauthorized",
|
// usdcDepositAmt: 100,
|
||||||
failCheckTx: true,
|
// usdxToMintAmt: 90,
|
||||||
updateMsgs: func(msgs []sdk.Msg) []sdk.Msg {
|
// errMsg: "unauthorized",
|
||||||
convertMsg := evmutiltypes.NewMsgConvertERC20ToCoin(
|
// failCheckTx: true,
|
||||||
suite.testEVMAddr2,
|
// updateMsgs: func(msgs []sdk.Msg) []sdk.Msg {
|
||||||
suite.testAddr,
|
// convertMsg := evmutiltypes.NewMsgConvertERC20ToCoin(
|
||||||
suite.usdcEVMAddr,
|
// suite.testEVMAddr2,
|
||||||
suite.getEVMAmount(100),
|
// suite.testAddr,
|
||||||
)
|
// suite.usdcEVMAddr,
|
||||||
msgs[0] = &convertMsg
|
// suite.getEVMAmount(100),
|
||||||
return msgs
|
// )
|
||||||
},
|
// msgs[0] = &convertMsg
|
||||||
},
|
// return msgs
|
||||||
|
// },
|
||||||
|
// },
|
||||||
{
|
{
|
||||||
name: "fails when trying to convert erc20 for non-whitelisted contract",
|
name: "fails when trying to convert erc20 for non-whitelisted contract",
|
||||||
usdcDepositAmt: 100,
|
usdcDepositAmt: 100,
|
||||||
@ -562,7 +475,7 @@ func (suite *EIP712TestSuite) TestEIP712Tx() {
|
|||||||
errMsg: "insufficient funds",
|
errMsg: "insufficient funds",
|
||||||
updateTx: func(txBuilder client.TxBuilder, msgs []sdk.Msg) client.TxBuilder {
|
updateTx: func(txBuilder client.TxBuilder, msgs []sdk.Msg) client.TxBuilder {
|
||||||
bk := suite.tApp.GetBankKeeper()
|
bk := suite.tApp.GetBankKeeper()
|
||||||
gasCoins := bk.GetBalance(suite.ctx, suite.testAddr, "ukava")
|
gasCoins := bk.GetBalance(suite.ctx, suite.testAddr, chaincfg.GasDenom)
|
||||||
suite.tApp.GetBankKeeper().SendCoins(suite.ctx, suite.testAddr, suite.testAddr2, sdk.NewCoins(gasCoins))
|
suite.tApp.GetBankKeeper().SendCoins(suite.ctx, suite.testAddr, suite.testAddr2, sdk.NewCoins(gasCoins))
|
||||||
return txBuilder
|
return txBuilder
|
||||||
},
|
},
|
||||||
@ -574,7 +487,7 @@ func (suite *EIP712TestSuite) TestEIP712Tx() {
|
|||||||
failCheckTx: true,
|
failCheckTx: true,
|
||||||
errMsg: "invalid chain-id",
|
errMsg: "invalid chain-id",
|
||||||
updateTx: func(txBuilder client.TxBuilder, msgs []sdk.Msg) client.TxBuilder {
|
updateTx: func(txBuilder client.TxBuilder, msgs []sdk.Msg) client.TxBuilder {
|
||||||
gasAmt := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(20)))
|
gasAmt := sdk.NewCoins(chaincfg.MakeCoinForGasDenom(20))
|
||||||
return suite.createTestEIP712CosmosTxBuilder(
|
return suite.createTestEIP712CosmosTxBuilder(
|
||||||
suite.testAddr, suite.testPrivKey, "kavatest_12-1", uint64(sims.DefaultGenTxGas*10), gasAmt, msgs,
|
suite.testAddr, suite.testPrivKey, "kavatest_12-1", uint64(sims.DefaultGenTxGas*10), gasAmt, msgs,
|
||||||
)
|
)
|
||||||
@ -587,7 +500,7 @@ func (suite *EIP712TestSuite) TestEIP712Tx() {
|
|||||||
failCheckTx: true,
|
failCheckTx: true,
|
||||||
errMsg: "invalid pubkey",
|
errMsg: "invalid pubkey",
|
||||||
updateTx: func(txBuilder client.TxBuilder, msgs []sdk.Msg) client.TxBuilder {
|
updateTx: func(txBuilder client.TxBuilder, msgs []sdk.Msg) client.TxBuilder {
|
||||||
gasAmt := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(20)))
|
gasAmt := sdk.NewCoins(chaincfg.MakeCoinForGasDenom(20))
|
||||||
return suite.createTestEIP712CosmosTxBuilder(
|
return suite.createTestEIP712CosmosTxBuilder(
|
||||||
suite.testAddr2, suite.testPrivKey2, ChainID, uint64(sims.DefaultGenTxGas*10), gasAmt, msgs,
|
suite.testAddr2, suite.testPrivKey2, ChainID, uint64(sims.DefaultGenTxGas*10), gasAmt, msgs,
|
||||||
)
|
)
|
||||||
@ -607,27 +520,15 @@ func (suite *EIP712TestSuite) TestEIP712Tx() {
|
|||||||
suite.usdcEVMAddr,
|
suite.usdcEVMAddr,
|
||||||
usdcAmt,
|
usdcAmt,
|
||||||
)
|
)
|
||||||
usdxAmt := sdkmath.NewInt(1_000_000).Mul(sdkmath.NewInt(tc.usdxToMintAmt))
|
|
||||||
mintMsg := cdptypes.NewMsgCreateCDP(
|
|
||||||
suite.testAddr,
|
|
||||||
sdk.NewCoin(USDCCoinDenom, usdcAmt),
|
|
||||||
sdk.NewCoin(cdptypes.DefaultStableDenom, usdxAmt),
|
|
||||||
USDCCDPType,
|
|
||||||
)
|
|
||||||
lendMsg := hardtypes.NewMsgDeposit(
|
|
||||||
suite.testAddr,
|
|
||||||
sdk.NewCoins(sdk.NewCoin(cdptypes.DefaultStableDenom, usdxAmt)),
|
|
||||||
)
|
|
||||||
msgs := []sdk.Msg{
|
msgs := []sdk.Msg{
|
||||||
&convertMsg,
|
&convertMsg,
|
||||||
&mintMsg,
|
|
||||||
&lendMsg,
|
|
||||||
}
|
}
|
||||||
if tc.updateMsgs != nil {
|
if tc.updateMsgs != nil {
|
||||||
msgs = tc.updateMsgs(msgs)
|
msgs = tc.updateMsgs(msgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
gasAmt := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(20)))
|
gasAmt := sdk.NewCoins(chaincfg.MakeCoinForGasDenom(20))
|
||||||
txBuilder := suite.createTestEIP712CosmosTxBuilder(
|
txBuilder := suite.createTestEIP712CosmosTxBuilder(
|
||||||
suite.testAddr, suite.testPrivKey, ChainID, uint64(sims.DefaultGenTxGas*10), gasAmt, msgs,
|
suite.testAddr, suite.testPrivKey, ChainID, uint64(sims.DefaultGenTxGas*10), gasAmt, msgs,
|
||||||
)
|
)
|
||||||
@ -665,17 +566,17 @@ func (suite *EIP712TestSuite) TestEIP712Tx() {
|
|||||||
suite.Require().Equal(sdk.ZeroInt(), amt.Amount)
|
suite.Require().Equal(sdk.ZeroInt(), amt.Amount)
|
||||||
|
|
||||||
// validate cdp
|
// validate cdp
|
||||||
cdp, found := suite.tApp.GetCDPKeeper().GetCdpByOwnerAndCollateralType(suite.ctx, suite.testAddr, USDCCDPType)
|
// cdp, found := suite.tApp.GetCDPKeeper().GetCdpByOwnerAndCollateralType(suite.ctx, suite.testAddr, USDCCDPType)
|
||||||
suite.Require().True(found)
|
// suite.Require().True(found)
|
||||||
suite.Require().Equal(suite.testAddr, cdp.Owner)
|
// suite.Require().Equal(suite.testAddr, cdp.Owner)
|
||||||
suite.Require().Equal(sdk.NewCoin(USDCCoinDenom, suite.getEVMAmount(100)), cdp.Collateral)
|
// suite.Require().Equal(sdk.NewCoin(USDCCoinDenom, suite.getEVMAmount(100)), cdp.Collateral)
|
||||||
suite.Require().Equal(sdk.NewCoin("usdx", sdkmath.NewInt(99_000_000)), cdp.Principal)
|
// suite.Require().Equal(sdk.NewCoin("usdx", sdkmath.NewInt(99_000_000)), cdp.Principal)
|
||||||
|
|
||||||
// validate hard
|
// validate hard
|
||||||
hardDeposit, found := suite.tApp.GetHardKeeper().GetDeposit(suite.ctx, suite.testAddr)
|
// hardDeposit, found := suite.tApp.GetHardKeeper().GetDeposit(suite.ctx, suite.testAddr)
|
||||||
suite.Require().True(found)
|
// suite.Require().True(found)
|
||||||
suite.Require().Equal(suite.testAddr, hardDeposit.Depositor)
|
// suite.Require().Equal(suite.testAddr, hardDeposit.Depositor)
|
||||||
suite.Require().Equal(sdk.NewCoins(sdk.NewCoin("usdx", sdkmath.NewInt(99_000_000))), hardDeposit.Amount)
|
// suite.Require().Equal(sdk.NewCoins(sdk.NewCoin("usdx", sdkmath.NewInt(99_000_000))), hardDeposit.Amount)
|
||||||
} else {
|
} else {
|
||||||
suite.Require().NotEqual(resDeliverTx.Code, uint32(0), resCheckTx.Log)
|
suite.Require().NotEqual(resDeliverTx.Code, uint32(0), resCheckTx.Log)
|
||||||
suite.Require().Contains(resDeliverTx.Log, tc.errMsg)
|
suite.Require().Contains(resDeliverTx.Log, tc.errMsg)
|
||||||
@ -695,25 +596,13 @@ func (suite *EIP712TestSuite) TestEIP712Tx_DepositAndWithdraw() {
|
|||||||
suite.usdcEVMAddr,
|
suite.usdcEVMAddr,
|
||||||
usdcAmt,
|
usdcAmt,
|
||||||
)
|
)
|
||||||
usdxAmt := sdkmath.NewInt(1_000_000).Mul(sdkmath.NewInt(99))
|
|
||||||
mintMsg := cdptypes.NewMsgCreateCDP(
|
|
||||||
suite.testAddr,
|
|
||||||
sdk.NewCoin(USDCCoinDenom, usdcAmt),
|
|
||||||
sdk.NewCoin(cdptypes.DefaultStableDenom, usdxAmt),
|
|
||||||
USDCCDPType,
|
|
||||||
)
|
|
||||||
lendMsg := hardtypes.NewMsgDeposit(
|
|
||||||
suite.testAddr,
|
|
||||||
sdk.NewCoins(sdk.NewCoin(cdptypes.DefaultStableDenom, usdxAmt)),
|
|
||||||
)
|
|
||||||
depositMsgs := []sdk.Msg{
|
depositMsgs := []sdk.Msg{
|
||||||
&convertMsg,
|
&convertMsg,
|
||||||
&mintMsg,
|
|
||||||
&lendMsg,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// deliver deposit msg
|
// deliver deposit msg
|
||||||
gasAmt := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(20)))
|
gasAmt := sdk.NewCoins(chaincfg.MakeCoinForGasDenom(20))
|
||||||
txBuilder := suite.createTestEIP712CosmosTxBuilder(
|
txBuilder := suite.createTestEIP712CosmosTxBuilder(
|
||||||
suite.testAddr, suite.testPrivKey, ChainID, uint64(sims.DefaultGenTxGas*10), gasAmt, depositMsgs,
|
suite.testAddr, suite.testPrivKey, ChainID, uint64(sims.DefaultGenTxGas*10), gasAmt, depositMsgs,
|
||||||
)
|
)
|
||||||
@ -727,10 +616,10 @@ func (suite *EIP712TestSuite) TestEIP712Tx_DepositAndWithdraw() {
|
|||||||
suite.Require().Equal(resDeliverTx.Code, uint32(0), resDeliverTx.Log)
|
suite.Require().Equal(resDeliverTx.Code, uint32(0), resDeliverTx.Log)
|
||||||
|
|
||||||
// validate hard
|
// validate hard
|
||||||
hardDeposit, found := suite.tApp.GetHardKeeper().GetDeposit(suite.ctx, suite.testAddr)
|
// hardDeposit, found := suite.tApp.GetHardKeeper().GetDeposit(suite.ctx, suite.testAddr)
|
||||||
suite.Require().True(found)
|
// suite.Require().True(found)
|
||||||
suite.Require().Equal(suite.testAddr, hardDeposit.Depositor)
|
// suite.Require().Equal(suite.testAddr, hardDeposit.Depositor)
|
||||||
suite.Require().Equal(sdk.NewCoins(sdk.NewCoin("usdx", sdkmath.NewInt(99_000_000))), hardDeposit.Amount)
|
// suite.Require().Equal(sdk.NewCoins(sdk.NewCoin("usdx", sdkmath.NewInt(99_000_000))), hardDeposit.Amount)
|
||||||
|
|
||||||
// validate erc20 balance
|
// validate erc20 balance
|
||||||
coinBal, err := suite.evmutilKeeper.QueryERC20BalanceOf(suite.ctx, suite.usdcEVMAddr, suite.testEVMAddr)
|
coinBal, err := suite.evmutilKeeper.QueryERC20BalanceOf(suite.ctx, suite.usdcEVMAddr, suite.testEVMAddr)
|
||||||
@ -743,18 +632,7 @@ func (suite *EIP712TestSuite) TestEIP712Tx_DepositAndWithdraw() {
|
|||||||
suite.testEVMAddr.String(),
|
suite.testEVMAddr.String(),
|
||||||
sdk.NewCoin(USDCCoinDenom, usdcAmt),
|
sdk.NewCoin(USDCCoinDenom, usdcAmt),
|
||||||
)
|
)
|
||||||
cdpWithdrawMsg := cdptypes.NewMsgRepayDebt(
|
|
||||||
suite.testAddr,
|
|
||||||
USDCCDPType,
|
|
||||||
sdk.NewCoin(cdptypes.DefaultStableDenom, usdxAmt),
|
|
||||||
)
|
|
||||||
hardWithdrawMsg := hardtypes.NewMsgWithdraw(
|
|
||||||
suite.testAddr,
|
|
||||||
sdk.NewCoins(sdk.NewCoin(cdptypes.DefaultStableDenom, usdxAmt)),
|
|
||||||
)
|
|
||||||
withdrawMsgs := []sdk.Msg{
|
withdrawMsgs := []sdk.Msg{
|
||||||
&hardWithdrawMsg,
|
|
||||||
&cdpWithdrawMsg,
|
|
||||||
&withdrawConvertMsg,
|
&withdrawConvertMsg,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -772,10 +650,10 @@ func (suite *EIP712TestSuite) TestEIP712Tx_DepositAndWithdraw() {
|
|||||||
suite.Require().Equal(resDeliverTx.Code, uint32(0), resDeliverTx.Log)
|
suite.Require().Equal(resDeliverTx.Code, uint32(0), resDeliverTx.Log)
|
||||||
|
|
||||||
// validate hard & cdp should be repayed
|
// validate hard & cdp should be repayed
|
||||||
_, found = suite.tApp.GetHardKeeper().GetDeposit(suite.ctx, suite.testAddr)
|
// _, found = suite.tApp.GetHardKeeper().GetDeposit(suite.ctx, suite.testAddr)
|
||||||
suite.Require().False(found)
|
// suite.Require().False(found)
|
||||||
_, found = suite.tApp.GetCDPKeeper().GetCdpByOwnerAndCollateralType(suite.ctx, suite.testAddr, USDCCDPType)
|
// _, found = suite.tApp.GetCDPKeeper().GetCdpByOwnerAndCollateralType(suite.ctx, suite.testAddr, USDCCDPType)
|
||||||
suite.Require().False(found)
|
// suite.Require().False(found)
|
||||||
|
|
||||||
// validate user cosmos erc20/usd balance
|
// validate user cosmos erc20/usd balance
|
||||||
bk := suite.tApp.GetBankKeeper()
|
bk := suite.tApp.GetBankKeeper()
|
||||||
|
@ -11,8 +11,9 @@ import (
|
|||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/app"
|
||||||
"github.com/kava-labs/kava/app/ante"
|
"github.com/0glabs/0g-chain/app/ante"
|
||||||
|
"github.com/0glabs/0g-chain/chaincfg"
|
||||||
)
|
)
|
||||||
|
|
||||||
func mustParseDecCoins(value string) sdk.DecCoins {
|
func mustParseDecCoins(value string) sdk.DecCoins {
|
||||||
@ -30,7 +31,7 @@ func TestEvmMinGasFilter(t *testing.T) {
|
|||||||
|
|
||||||
ctx := tApp.NewContext(true, tmproto.Header{Height: 1, Time: tmtime.Now()})
|
ctx := tApp.NewContext(true, tmproto.Header{Height: 1, Time: tmtime.Now()})
|
||||||
tApp.GetEvmKeeper().SetParams(ctx, evmtypes.Params{
|
tApp.GetEvmKeeper().SetParams(ctx, evmtypes.Params{
|
||||||
EvmDenom: "akava",
|
EvmDenom: chaincfg.EvmDenom,
|
||||||
})
|
})
|
||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
@ -44,29 +45,29 @@ func TestEvmMinGasFilter(t *testing.T) {
|
|||||||
mustParseDecCoins(""),
|
mustParseDecCoins(""),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"zero ukava gas price",
|
"zero ua0gi gas price",
|
||||||
mustParseDecCoins("0ukava"),
|
mustParseDecCoins("0ua0gi"),
|
||||||
mustParseDecCoins("0ukava"),
|
mustParseDecCoins("0ua0gi"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"non-zero ukava gas price",
|
"non-zero ua0gi gas price",
|
||||||
mustParseDecCoins("0.001ukava"),
|
mustParseDecCoins("0.001ua0gi"),
|
||||||
mustParseDecCoins("0.001ukava"),
|
mustParseDecCoins("0.001ua0gi"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"zero ukava gas price, min akava price",
|
"zero ua0gi gas price, min neuron price",
|
||||||
mustParseDecCoins("0ukava;100000akava"),
|
mustParseDecCoins("0ua0gi;100000neuron"),
|
||||||
mustParseDecCoins("0ukava"), // akava is removed
|
mustParseDecCoins("0ua0gi"), // neuron is removed
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"zero ukava gas price, min akava price, other token",
|
"zero ua0gi gas price, min neuron price, other token",
|
||||||
mustParseDecCoins("0ukava;100000akava;0.001other"),
|
mustParseDecCoins("0ua0gi;100000neuron;0.001other"),
|
||||||
mustParseDecCoins("0ukava;0.001other"), // akava is removed
|
mustParseDecCoins("0ua0gi;0.001other"), // neuron is removed
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"non-zero ukava gas price, min akava price",
|
"non-zero ua0gi gas price, min neuron price",
|
||||||
mustParseDecCoins("0.25ukava;100000akava;0.001other"),
|
mustParseDecCoins("0.25ua0gi;100000neuron;0.001other"),
|
||||||
mustParseDecCoins("0.25ukava;0.001other"), // akava is removed
|
mustParseDecCoins("0.25ua0gi;0.001other"), // neuron is removed
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,6 @@ import (
|
|||||||
errorsmod "cosmossdk.io/errors"
|
errorsmod "cosmossdk.io/errors"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
vesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ sdk.AnteDecorator = VestingAccountDecorator{}
|
var _ sdk.AnteDecorator = VestingAccountDecorator{}
|
||||||
@ -17,9 +16,9 @@ type VestingAccountDecorator struct {
|
|||||||
func NewVestingAccountDecorator() VestingAccountDecorator {
|
func NewVestingAccountDecorator() VestingAccountDecorator {
|
||||||
return VestingAccountDecorator{
|
return VestingAccountDecorator{
|
||||||
disabledMsgTypeUrls: []string{
|
disabledMsgTypeUrls: []string{
|
||||||
sdk.MsgTypeURL(&vesting.MsgCreateVestingAccount{}),
|
// sdk.MsgTypeURL(&vesting.MsgCreateVestingAccount{}),
|
||||||
sdk.MsgTypeURL(&vesting.MsgCreatePermanentLockedAccount{}),
|
// sdk.MsgTypeURL(&vesting.MsgCreatePermanentLockedAccount{}),
|
||||||
sdk.MsgTypeURL(&vesting.MsgCreatePeriodicVestingAccount{}),
|
// sdk.MsgTypeURL(&vesting.MsgCreatePeriodicVestingAccount{}),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,8 +12,9 @@ import (
|
|||||||
vesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
|
vesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
|
||||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/app"
|
||||||
"github.com/kava-labs/kava/app/ante"
|
"github.com/0glabs/0g-chain/app/ante"
|
||||||
|
"github.com/0glabs/0g-chain/chaincfg"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestVestingMempoolDecorator_MsgCreateVestingAccount_Unauthorized(t *testing.T) {
|
func TestVestingMempoolDecorator_MsgCreateVestingAccount_Unauthorized(t *testing.T) {
|
||||||
@ -33,7 +34,7 @@ func TestVestingMempoolDecorator_MsgCreateVestingAccount_Unauthorized(t *testing
|
|||||||
"MsgCreateVestingAccount",
|
"MsgCreateVestingAccount",
|
||||||
vesting.NewMsgCreateVestingAccount(
|
vesting.NewMsgCreateVestingAccount(
|
||||||
testAddresses[0], testAddresses[1],
|
testAddresses[0], testAddresses[1],
|
||||||
sdk.NewCoins(sdk.NewInt64Coin("ukava", 100_000_000)),
|
sdk.NewCoins(chaincfg.MakeCoinForGasDenom(100)),
|
||||||
time.Date(1998, 1, 1, 0, 0, 0, 0, time.UTC).Unix(),
|
time.Date(1998, 1, 1, 0, 0, 0, 0, time.UTC).Unix(),
|
||||||
false,
|
false,
|
||||||
),
|
),
|
||||||
@ -44,7 +45,7 @@ func TestVestingMempoolDecorator_MsgCreateVestingAccount_Unauthorized(t *testing
|
|||||||
"MsgCreateVestingAccount",
|
"MsgCreateVestingAccount",
|
||||||
vesting.NewMsgCreatePermanentLockedAccount(
|
vesting.NewMsgCreatePermanentLockedAccount(
|
||||||
testAddresses[0], testAddresses[1],
|
testAddresses[0], testAddresses[1],
|
||||||
sdk.NewCoins(sdk.NewInt64Coin("ukava", 100_000_000)),
|
sdk.NewCoins(chaincfg.MakeCoinForGasDenom(100)),
|
||||||
),
|
),
|
||||||
true,
|
true,
|
||||||
"MsgTypeURL /cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount not supported",
|
"MsgTypeURL /cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount not supported",
|
||||||
@ -63,7 +64,7 @@ func TestVestingMempoolDecorator_MsgCreateVestingAccount_Unauthorized(t *testing
|
|||||||
"other messages not affected",
|
"other messages not affected",
|
||||||
banktypes.NewMsgSend(
|
banktypes.NewMsgSend(
|
||||||
testAddresses[0], testAddresses[1],
|
testAddresses[0], testAddresses[1],
|
||||||
sdk.NewCoins(sdk.NewInt64Coin("ukava", 100_000_000)),
|
sdk.NewCoins(chaincfg.MakeCoinForGasDenom(100)),
|
||||||
),
|
),
|
||||||
false,
|
false,
|
||||||
"",
|
"",
|
||||||
|
402
app/app.go
402
app/app.go
@ -31,6 +31,7 @@ import (
|
|||||||
authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
|
authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||||
"github.com/cosmos/cosmos-sdk/x/auth/vesting"
|
"github.com/cosmos/cosmos-sdk/x/auth/vesting"
|
||||||
|
vestingkeeper "github.com/cosmos/cosmos-sdk/x/auth/vesting/keeper"
|
||||||
vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
|
vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
|
||||||
"github.com/cosmos/cosmos-sdk/x/authz"
|
"github.com/cosmos/cosmos-sdk/x/authz"
|
||||||
authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper"
|
authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper"
|
||||||
@ -39,8 +40,6 @@ import (
|
|||||||
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
|
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
|
||||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||||
"github.com/cosmos/cosmos-sdk/x/capability"
|
"github.com/cosmos/cosmos-sdk/x/capability"
|
||||||
capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper"
|
|
||||||
capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types"
|
|
||||||
consensus "github.com/cosmos/cosmos-sdk/x/consensus"
|
consensus "github.com/cosmos/cosmos-sdk/x/consensus"
|
||||||
consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper"
|
consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper"
|
||||||
consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types"
|
consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types"
|
||||||
@ -92,78 +91,52 @@ import (
|
|||||||
ibcporttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types"
|
ibcporttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types"
|
||||||
ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported"
|
ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported"
|
||||||
ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper"
|
ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper"
|
||||||
solomachine "github.com/cosmos/ibc-go/v7/modules/light-clients/06-solomachine"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint"
|
"github.com/ethereum/go-ethereum/core/vm"
|
||||||
evmante "github.com/evmos/ethermint/app/ante"
|
evmante "github.com/evmos/ethermint/app/ante"
|
||||||
ethermintconfig "github.com/evmos/ethermint/server/config"
|
ethermintconfig "github.com/evmos/ethermint/server/config"
|
||||||
"github.com/evmos/ethermint/x/evm"
|
"github.com/evmos/ethermint/x/evm"
|
||||||
evmkeeper "github.com/evmos/ethermint/x/evm/keeper"
|
evmkeeper "github.com/evmos/ethermint/x/evm/keeper"
|
||||||
evmtypes "github.com/evmos/ethermint/x/evm/types"
|
evmtypes "github.com/evmos/ethermint/x/evm/types"
|
||||||
"github.com/evmos/ethermint/x/evm/vm/geth"
|
|
||||||
"github.com/evmos/ethermint/x/feemarket"
|
"github.com/evmos/ethermint/x/feemarket"
|
||||||
feemarketkeeper "github.com/evmos/ethermint/x/feemarket/keeper"
|
feemarketkeeper "github.com/evmos/ethermint/x/feemarket/keeper"
|
||||||
feemarkettypes "github.com/evmos/ethermint/x/feemarket/types"
|
feemarkettypes "github.com/evmos/ethermint/x/feemarket/types"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app/ante"
|
"github.com/0glabs/0g-chain/app/ante"
|
||||||
kavaparams "github.com/kava-labs/kava/app/params"
|
chainparams "github.com/0glabs/0g-chain/app/params"
|
||||||
"github.com/kava-labs/kava/x/auction"
|
"github.com/0glabs/0g-chain/chaincfg"
|
||||||
auctionkeeper "github.com/kava-labs/kava/x/auction/keeper"
|
"github.com/0glabs/0g-chain/x/bep3"
|
||||||
auctiontypes "github.com/kava-labs/kava/x/auction/types"
|
bep3keeper "github.com/0glabs/0g-chain/x/bep3/keeper"
|
||||||
"github.com/kava-labs/kava/x/bep3"
|
bep3types "github.com/0glabs/0g-chain/x/bep3/types"
|
||||||
bep3keeper "github.com/kava-labs/kava/x/bep3/keeper"
|
"github.com/0glabs/0g-chain/x/committee"
|
||||||
bep3types "github.com/kava-labs/kava/x/bep3/types"
|
committeeclient "github.com/0glabs/0g-chain/x/committee/client"
|
||||||
"github.com/kava-labs/kava/x/cdp"
|
committeekeeper "github.com/0glabs/0g-chain/x/committee/keeper"
|
||||||
cdpkeeper "github.com/kava-labs/kava/x/cdp/keeper"
|
committeetypes "github.com/0glabs/0g-chain/x/committee/types"
|
||||||
cdptypes "github.com/kava-labs/kava/x/cdp/types"
|
evmutil "github.com/0glabs/0g-chain/x/evmutil"
|
||||||
"github.com/kava-labs/kava/x/committee"
|
evmutilkeeper "github.com/0glabs/0g-chain/x/evmutil/keeper"
|
||||||
committeeclient "github.com/kava-labs/kava/x/committee/client"
|
evmutiltypes "github.com/0glabs/0g-chain/x/evmutil/types"
|
||||||
committeekeeper "github.com/kava-labs/kava/x/committee/keeper"
|
issuance "github.com/0glabs/0g-chain/x/issuance"
|
||||||
committeetypes "github.com/kava-labs/kava/x/committee/types"
|
issuancekeeper "github.com/0glabs/0g-chain/x/issuance/keeper"
|
||||||
"github.com/kava-labs/kava/x/community"
|
issuancetypes "github.com/0glabs/0g-chain/x/issuance/types"
|
||||||
communityclient "github.com/kava-labs/kava/x/community/client"
|
pricefeed "github.com/0glabs/0g-chain/x/pricefeed"
|
||||||
communitykeeper "github.com/kava-labs/kava/x/community/keeper"
|
pricefeedkeeper "github.com/0glabs/0g-chain/x/pricefeed/keeper"
|
||||||
communitytypes "github.com/kava-labs/kava/x/community/types"
|
pricefeedtypes "github.com/0glabs/0g-chain/x/pricefeed/types"
|
||||||
earn "github.com/kava-labs/kava/x/earn"
|
validatorvesting "github.com/0glabs/0g-chain/x/validator-vesting"
|
||||||
earnclient "github.com/kava-labs/kava/x/earn/client"
|
validatorvestingrest "github.com/0glabs/0g-chain/x/validator-vesting/client/rest"
|
||||||
earnkeeper "github.com/kava-labs/kava/x/earn/keeper"
|
validatorvestingtypes "github.com/0glabs/0g-chain/x/validator-vesting/types"
|
||||||
earntypes "github.com/kava-labs/kava/x/earn/types"
|
|
||||||
evmutil "github.com/kava-labs/kava/x/evmutil"
|
capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper"
|
||||||
evmutilkeeper "github.com/kava-labs/kava/x/evmutil/keeper"
|
capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types"
|
||||||
evmutiltypes "github.com/kava-labs/kava/x/evmutil/types"
|
|
||||||
"github.com/kava-labs/kava/x/hard"
|
council "github.com/0glabs/0g-chain/x/council/v1"
|
||||||
hardkeeper "github.com/kava-labs/kava/x/hard/keeper"
|
councilkeeper "github.com/0glabs/0g-chain/x/council/v1/keeper"
|
||||||
hardtypes "github.com/kava-labs/kava/x/hard/types"
|
counciltypes "github.com/0glabs/0g-chain/x/council/v1/types"
|
||||||
"github.com/kava-labs/kava/x/incentive"
|
dasigners "github.com/0glabs/0g-chain/x/dasigners/v1"
|
||||||
incentivekeeper "github.com/kava-labs/kava/x/incentive/keeper"
|
dasignerskeeper "github.com/0glabs/0g-chain/x/dasigners/v1/keeper"
|
||||||
incentivetypes "github.com/kava-labs/kava/x/incentive/types"
|
dasignerstypes "github.com/0glabs/0g-chain/x/dasigners/v1/types"
|
||||||
issuance "github.com/kava-labs/kava/x/issuance"
|
|
||||||
issuancekeeper "github.com/kava-labs/kava/x/issuance/keeper"
|
dasignersprecompile "github.com/0glabs/0g-chain/precompiles/dasigners"
|
||||||
issuancetypes "github.com/kava-labs/kava/x/issuance/types"
|
|
||||||
"github.com/kava-labs/kava/x/kavadist"
|
|
||||||
kavadistclient "github.com/kava-labs/kava/x/kavadist/client"
|
|
||||||
kavadistkeeper "github.com/kava-labs/kava/x/kavadist/keeper"
|
|
||||||
kavadisttypes "github.com/kava-labs/kava/x/kavadist/types"
|
|
||||||
"github.com/kava-labs/kava/x/liquid"
|
|
||||||
liquidkeeper "github.com/kava-labs/kava/x/liquid/keeper"
|
|
||||||
liquidtypes "github.com/kava-labs/kava/x/liquid/types"
|
|
||||||
metrics "github.com/kava-labs/kava/x/metrics"
|
|
||||||
metricstypes "github.com/kava-labs/kava/x/metrics/types"
|
|
||||||
pricefeed "github.com/kava-labs/kava/x/pricefeed"
|
|
||||||
pricefeedkeeper "github.com/kava-labs/kava/x/pricefeed/keeper"
|
|
||||||
pricefeedtypes "github.com/kava-labs/kava/x/pricefeed/types"
|
|
||||||
"github.com/kava-labs/kava/x/router"
|
|
||||||
routerkeeper "github.com/kava-labs/kava/x/router/keeper"
|
|
||||||
routertypes "github.com/kava-labs/kava/x/router/types"
|
|
||||||
savings "github.com/kava-labs/kava/x/savings"
|
|
||||||
savingskeeper "github.com/kava-labs/kava/x/savings/keeper"
|
|
||||||
savingstypes "github.com/kava-labs/kava/x/savings/types"
|
|
||||||
"github.com/kava-labs/kava/x/swap"
|
|
||||||
swapkeeper "github.com/kava-labs/kava/x/swap/keeper"
|
|
||||||
swaptypes "github.com/kava-labs/kava/x/swap/types"
|
|
||||||
validatorvesting "github.com/kava-labs/kava/x/validator-vesting"
|
|
||||||
validatorvestingrest "github.com/kava-labs/kava/x/validator-vesting/client/rest"
|
|
||||||
validatorvestingtypes "github.com/kava-labs/kava/x/validator-vesting/types"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -189,47 +162,28 @@ var (
|
|||||||
upgradeclient.LegacyCancelProposalHandler,
|
upgradeclient.LegacyCancelProposalHandler,
|
||||||
ibcclientclient.UpdateClientProposalHandler,
|
ibcclientclient.UpdateClientProposalHandler,
|
||||||
ibcclientclient.UpgradeProposalHandler,
|
ibcclientclient.UpgradeProposalHandler,
|
||||||
kavadistclient.ProposalHandler,
|
|
||||||
committeeclient.ProposalHandler,
|
committeeclient.ProposalHandler,
|
||||||
earnclient.DepositProposalHandler,
|
|
||||||
earnclient.WithdrawProposalHandler,
|
|
||||||
communityclient.LendDepositProposalHandler,
|
|
||||||
communityclient.LendWithdrawProposalHandler,
|
|
||||||
}),
|
}),
|
||||||
params.AppModuleBasic{},
|
params.AppModuleBasic{},
|
||||||
crisis.AppModuleBasic{},
|
crisis.AppModuleBasic{},
|
||||||
slashing.AppModuleBasic{},
|
slashing.AppModuleBasic{},
|
||||||
ibc.AppModuleBasic{},
|
ibc.AppModuleBasic{},
|
||||||
ibctm.AppModuleBasic{},
|
|
||||||
solomachine.AppModuleBasic{},
|
|
||||||
packetforward.AppModuleBasic{},
|
|
||||||
upgrade.AppModuleBasic{},
|
upgrade.AppModuleBasic{},
|
||||||
evidence.AppModuleBasic{},
|
evidence.AppModuleBasic{},
|
||||||
authzmodule.AppModuleBasic{},
|
authzmodule.AppModuleBasic{},
|
||||||
transfer.AppModuleBasic{},
|
transfer.AppModuleBasic{},
|
||||||
vesting.AppModuleBasic{},
|
vesting.AppModuleBasic{},
|
||||||
evm.AppModuleBasic{},
|
evm.AppModuleBasic{},
|
||||||
feemarket.AppModuleBasic{},
|
|
||||||
kavadist.AppModuleBasic{},
|
|
||||||
auction.AppModuleBasic{},
|
|
||||||
issuance.AppModuleBasic{},
|
issuance.AppModuleBasic{},
|
||||||
bep3.AppModuleBasic{},
|
bep3.AppModuleBasic{},
|
||||||
pricefeed.AppModuleBasic{},
|
pricefeed.AppModuleBasic{},
|
||||||
swap.AppModuleBasic{},
|
|
||||||
cdp.AppModuleBasic{},
|
|
||||||
hard.AppModuleBasic{},
|
|
||||||
committee.AppModuleBasic{},
|
committee.AppModuleBasic{},
|
||||||
incentive.AppModuleBasic{},
|
|
||||||
savings.AppModuleBasic{},
|
|
||||||
validatorvesting.AppModuleBasic{},
|
validatorvesting.AppModuleBasic{},
|
||||||
evmutil.AppModuleBasic{},
|
evmutil.AppModuleBasic{},
|
||||||
liquid.AppModuleBasic{},
|
|
||||||
earn.AppModuleBasic{},
|
|
||||||
router.AppModuleBasic{},
|
|
||||||
mint.AppModuleBasic{},
|
mint.AppModuleBasic{},
|
||||||
community.AppModuleBasic{},
|
|
||||||
metrics.AppModuleBasic{},
|
|
||||||
consensus.AppModuleBasic{},
|
consensus.AppModuleBasic{},
|
||||||
|
council.AppModuleBasic{},
|
||||||
|
dasigners.AppModuleBasic{},
|
||||||
)
|
)
|
||||||
|
|
||||||
// module account permissions
|
// module account permissions
|
||||||
@ -244,20 +198,9 @@ var (
|
|||||||
ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner},
|
ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner},
|
||||||
evmtypes.ModuleName: {authtypes.Minter, authtypes.Burner}, // used for secure addition and subtraction of balance using module account
|
evmtypes.ModuleName: {authtypes.Minter, authtypes.Burner}, // used for secure addition and subtraction of balance using module account
|
||||||
evmutiltypes.ModuleName: {authtypes.Minter, authtypes.Burner},
|
evmutiltypes.ModuleName: {authtypes.Minter, authtypes.Burner},
|
||||||
kavadisttypes.KavaDistMacc: {authtypes.Minter},
|
|
||||||
auctiontypes.ModuleName: nil,
|
|
||||||
issuancetypes.ModuleAccountName: {authtypes.Minter, authtypes.Burner},
|
issuancetypes.ModuleAccountName: {authtypes.Minter, authtypes.Burner},
|
||||||
bep3types.ModuleName: {authtypes.Burner, authtypes.Minter},
|
bep3types.ModuleName: {authtypes.Burner, authtypes.Minter},
|
||||||
swaptypes.ModuleName: nil,
|
|
||||||
cdptypes.ModuleName: {authtypes.Minter, authtypes.Burner},
|
|
||||||
cdptypes.LiquidatorMacc: {authtypes.Minter, authtypes.Burner},
|
|
||||||
hardtypes.ModuleAccountName: {authtypes.Minter},
|
|
||||||
savingstypes.ModuleAccountName: nil,
|
|
||||||
liquidtypes.ModuleAccountName: {authtypes.Minter, authtypes.Burner},
|
|
||||||
earntypes.ModuleAccountName: nil,
|
|
||||||
kavadisttypes.FundModuleAccount: nil,
|
|
||||||
minttypes.ModuleName: {authtypes.Minter},
|
minttypes.ModuleName: {authtypes.Minter},
|
||||||
communitytypes.ModuleName: nil,
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -276,7 +219,6 @@ type Options struct {
|
|||||||
MempoolAuthAddresses []sdk.AccAddress
|
MempoolAuthAddresses []sdk.AccAddress
|
||||||
EVMTrace string
|
EVMTrace string
|
||||||
EVMMaxGasWanted uint64
|
EVMMaxGasWanted uint64
|
||||||
TelemetryOptions metricstypes.TelemetryOptions
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefaultOptions is a sensible default Options value.
|
// DefaultOptions is a sensible default Options value.
|
||||||
@ -285,7 +227,7 @@ var DefaultOptions = Options{
|
|||||||
EVMMaxGasWanted: ethermintconfig.DefaultMaxTxGasWanted,
|
EVMMaxGasWanted: ethermintconfig.DefaultMaxTxGasWanted,
|
||||||
}
|
}
|
||||||
|
|
||||||
// App is the Kava ABCI application.
|
// App is the 0gChain ABCI application.
|
||||||
type App struct {
|
type App struct {
|
||||||
*baseapp.BaseApp
|
*baseapp.BaseApp
|
||||||
|
|
||||||
@ -318,22 +260,14 @@ type App struct {
|
|||||||
upgradeKeeper upgradekeeper.Keeper
|
upgradeKeeper upgradekeeper.Keeper
|
||||||
evidenceKeeper evidencekeeper.Keeper
|
evidenceKeeper evidencekeeper.Keeper
|
||||||
transferKeeper ibctransferkeeper.Keeper
|
transferKeeper ibctransferkeeper.Keeper
|
||||||
kavadistKeeper kavadistkeeper.Keeper
|
CouncilKeeper councilkeeper.Keeper
|
||||||
auctionKeeper auctionkeeper.Keeper
|
|
||||||
issuanceKeeper issuancekeeper.Keeper
|
issuanceKeeper issuancekeeper.Keeper
|
||||||
bep3Keeper bep3keeper.Keeper
|
bep3Keeper bep3keeper.Keeper
|
||||||
pricefeedKeeper pricefeedkeeper.Keeper
|
pricefeedKeeper pricefeedkeeper.Keeper
|
||||||
swapKeeper swapkeeper.Keeper
|
|
||||||
cdpKeeper cdpkeeper.Keeper
|
|
||||||
hardKeeper hardkeeper.Keeper
|
|
||||||
committeeKeeper committeekeeper.Keeper
|
committeeKeeper committeekeeper.Keeper
|
||||||
incentiveKeeper incentivekeeper.Keeper
|
vestingKeeper vestingkeeper.VestingKeeper
|
||||||
savingsKeeper savingskeeper.Keeper
|
|
||||||
liquidKeeper liquidkeeper.Keeper
|
|
||||||
earnKeeper earnkeeper.Keeper
|
|
||||||
routerKeeper routerkeeper.Keeper
|
|
||||||
mintKeeper mintkeeper.Keeper
|
mintKeeper mintkeeper.Keeper
|
||||||
communityKeeper communitykeeper.Keeper
|
dasignersKeeper dasignerskeeper.Keeper
|
||||||
consensusParamsKeeper consensusparamkeeper.Keeper
|
consensusParamsKeeper consensusparamkeeper.Keeper
|
||||||
|
|
||||||
// make scoped keepers public for test purposes
|
// make scoped keepers public for test purposes
|
||||||
@ -365,7 +299,7 @@ func NewApp(
|
|||||||
db dbm.DB,
|
db dbm.DB,
|
||||||
homePath string,
|
homePath string,
|
||||||
traceStore io.Writer,
|
traceStore io.Writer,
|
||||||
encodingConfig kavaparams.EncodingConfig,
|
encodingConfig chainparams.EncodingConfig,
|
||||||
options Options,
|
options Options,
|
||||||
baseAppOptions ...func(*baseapp.BaseApp),
|
baseAppOptions ...func(*baseapp.BaseApp),
|
||||||
) *App {
|
) *App {
|
||||||
@ -373,23 +307,25 @@ func NewApp(
|
|||||||
legacyAmino := encodingConfig.Amino
|
legacyAmino := encodingConfig.Amino
|
||||||
interfaceRegistry := encodingConfig.InterfaceRegistry
|
interfaceRegistry := encodingConfig.InterfaceRegistry
|
||||||
|
|
||||||
bApp := baseapp.NewBaseApp(appName, logger, db, encodingConfig.TxConfig.TxDecoder(), baseAppOptions...)
|
bApp := baseapp.NewBaseApp(chaincfg.AppName, logger, db, encodingConfig.TxConfig.TxDecoder(), baseAppOptions...)
|
||||||
bApp.SetCommitMultiStoreTracer(traceStore)
|
bApp.SetCommitMultiStoreTracer(traceStore)
|
||||||
bApp.SetVersion(version.Version)
|
bApp.SetVersion(version.Version)
|
||||||
bApp.SetInterfaceRegistry(interfaceRegistry)
|
bApp.SetInterfaceRegistry(interfaceRegistry)
|
||||||
|
|
||||||
keys := sdk.NewKVStoreKeys(
|
keys := sdk.NewKVStoreKeys(
|
||||||
authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey,
|
authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey,
|
||||||
distrtypes.StoreKey, slashingtypes.StoreKey, packetforwardtypes.StoreKey,
|
distrtypes.StoreKey, slashingtypes.StoreKey,
|
||||||
govtypes.StoreKey, paramstypes.StoreKey, ibcexported.StoreKey,
|
govtypes.StoreKey, paramstypes.StoreKey, ibcexported.StoreKey,
|
||||||
upgradetypes.StoreKey, evidencetypes.StoreKey, ibctransfertypes.StoreKey,
|
upgradetypes.StoreKey, evidencetypes.StoreKey, ibctransfertypes.StoreKey,
|
||||||
evmtypes.StoreKey, feemarkettypes.StoreKey, authzkeeper.StoreKey,
|
evmtypes.StoreKey, feemarkettypes.StoreKey, authzkeeper.StoreKey,
|
||||||
capabilitytypes.StoreKey, kavadisttypes.StoreKey, auctiontypes.StoreKey,
|
capabilitytypes.StoreKey,
|
||||||
issuancetypes.StoreKey, bep3types.StoreKey, pricefeedtypes.StoreKey,
|
issuancetypes.StoreKey, bep3types.StoreKey, pricefeedtypes.StoreKey,
|
||||||
swaptypes.StoreKey, cdptypes.StoreKey, hardtypes.StoreKey, communitytypes.StoreKey,
|
committeetypes.StoreKey, evmutiltypes.StoreKey,
|
||||||
committeetypes.StoreKey, incentivetypes.StoreKey, evmutiltypes.StoreKey,
|
minttypes.StoreKey,
|
||||||
savingstypes.StoreKey, earntypes.StoreKey, minttypes.StoreKey,
|
counciltypes.StoreKey,
|
||||||
consensusparamtypes.StoreKey, crisistypes.StoreKey,
|
dasignerstypes.StoreKey,
|
||||||
|
vestingtypes.StoreKey,
|
||||||
|
consensusparamtypes.StoreKey,
|
||||||
)
|
)
|
||||||
tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey, evmtypes.TransientKey, feemarkettypes.TransientKey)
|
tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey, evmtypes.TransientKey, feemarkettypes.TransientKey)
|
||||||
memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey)
|
memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey)
|
||||||
@ -422,23 +358,15 @@ func NewApp(
|
|||||||
slashingSubspace := app.paramsKeeper.Subspace(slashingtypes.ModuleName)
|
slashingSubspace := app.paramsKeeper.Subspace(slashingtypes.ModuleName)
|
||||||
govSubspace := app.paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govv1.ParamKeyTable())
|
govSubspace := app.paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govv1.ParamKeyTable())
|
||||||
crisisSubspace := app.paramsKeeper.Subspace(crisistypes.ModuleName)
|
crisisSubspace := app.paramsKeeper.Subspace(crisistypes.ModuleName)
|
||||||
kavadistSubspace := app.paramsKeeper.Subspace(kavadisttypes.ModuleName)
|
|
||||||
auctionSubspace := app.paramsKeeper.Subspace(auctiontypes.ModuleName)
|
|
||||||
issuanceSubspace := app.paramsKeeper.Subspace(issuancetypes.ModuleName)
|
issuanceSubspace := app.paramsKeeper.Subspace(issuancetypes.ModuleName)
|
||||||
bep3Subspace := app.paramsKeeper.Subspace(bep3types.ModuleName)
|
bep3Subspace := app.paramsKeeper.Subspace(bep3types.ModuleName)
|
||||||
pricefeedSubspace := app.paramsKeeper.Subspace(pricefeedtypes.ModuleName)
|
pricefeedSubspace := app.paramsKeeper.Subspace(pricefeedtypes.ModuleName)
|
||||||
swapSubspace := app.paramsKeeper.Subspace(swaptypes.ModuleName)
|
|
||||||
cdpSubspace := app.paramsKeeper.Subspace(cdptypes.ModuleName)
|
|
||||||
hardSubspace := app.paramsKeeper.Subspace(hardtypes.ModuleName)
|
|
||||||
incentiveSubspace := app.paramsKeeper.Subspace(incentivetypes.ModuleName)
|
|
||||||
savingsSubspace := app.paramsKeeper.Subspace(savingstypes.ModuleName)
|
|
||||||
ibcSubspace := app.paramsKeeper.Subspace(ibcexported.ModuleName)
|
ibcSubspace := app.paramsKeeper.Subspace(ibcexported.ModuleName)
|
||||||
ibctransferSubspace := app.paramsKeeper.Subspace(ibctransfertypes.ModuleName)
|
ibctransferSubspace := app.paramsKeeper.Subspace(ibctransfertypes.ModuleName)
|
||||||
packetforwardSubspace := app.paramsKeeper.Subspace(packetforwardtypes.ModuleName).WithKeyTable(packetforwardtypes.ParamKeyTable())
|
packetforwardSubspace := app.paramsKeeper.Subspace(packetforwardtypes.ModuleName).WithKeyTable(packetforwardtypes.ParamKeyTable())
|
||||||
feemarketSubspace := app.paramsKeeper.Subspace(feemarkettypes.ModuleName)
|
feemarketSubspace := app.paramsKeeper.Subspace(feemarkettypes.ModuleName)
|
||||||
evmSubspace := app.paramsKeeper.Subspace(evmtypes.ModuleName)
|
evmSubspace := app.paramsKeeper.Subspace(evmtypes.ModuleName)
|
||||||
evmutilSubspace := app.paramsKeeper.Subspace(evmutiltypes.ModuleName)
|
evmutilSubspace := app.paramsKeeper.Subspace(evmutiltypes.ModuleName)
|
||||||
earnSubspace := app.paramsKeeper.Subspace(earntypes.ModuleName)
|
|
||||||
mintSubspace := app.paramsKeeper.Subspace(minttypes.ModuleName)
|
mintSubspace := app.paramsKeeper.Subspace(minttypes.ModuleName)
|
||||||
|
|
||||||
// set the BaseApp's parameter store
|
// set the BaseApp's parameter store
|
||||||
@ -471,6 +399,7 @@ func NewApp(
|
|||||||
keys[stakingtypes.StoreKey],
|
keys[stakingtypes.StoreKey],
|
||||||
app.accountKeeper,
|
app.accountKeeper,
|
||||||
app.bankKeeper,
|
app.bankKeeper,
|
||||||
|
app.vestingKeeper,
|
||||||
govAuthAddrStr,
|
govAuthAddrStr,
|
||||||
)
|
)
|
||||||
app.authzKeeper = authzkeeper.NewKeeper(
|
app.authzKeeper = authzkeeper.NewKeeper(
|
||||||
@ -545,18 +474,31 @@ func NewApp(
|
|||||||
)
|
)
|
||||||
|
|
||||||
evmBankKeeper := evmutilkeeper.NewEvmBankKeeper(app.evmutilKeeper, app.bankKeeper, app.accountKeeper)
|
evmBankKeeper := evmutilkeeper.NewEvmBankKeeper(app.evmutilKeeper, app.bankKeeper, app.accountKeeper)
|
||||||
|
// dasigners keeper
|
||||||
|
app.dasignersKeeper = dasignerskeeper.NewKeeper(keys[dasignerstypes.StoreKey], appCodec, app.stakingKeeper)
|
||||||
|
// precopmiles
|
||||||
|
precompiles := make(map[common.Address]vm.PrecompiledContract)
|
||||||
|
daSignersPrecompile, err := dasignersprecompile.NewDASignersPrecompile(app.dasignersKeeper)
|
||||||
|
if err != nil {
|
||||||
|
panic("initialize precompile failed")
|
||||||
|
}
|
||||||
|
precompiles[daSignersPrecompile.Address()] = daSignersPrecompile
|
||||||
|
// evm keeper
|
||||||
app.evmKeeper = evmkeeper.NewKeeper(
|
app.evmKeeper = evmkeeper.NewKeeper(
|
||||||
appCodec, keys[evmtypes.StoreKey], tkeys[evmtypes.TransientKey],
|
appCodec,
|
||||||
|
keys[evmtypes.StoreKey],
|
||||||
|
tkeys[evmtypes.TransientKey],
|
||||||
govAuthAddr,
|
govAuthAddr,
|
||||||
app.accountKeeper, evmBankKeeper, app.stakingKeeper, app.feeMarketKeeper,
|
app.accountKeeper,
|
||||||
nil, // precompiled contracts
|
evmBankKeeper,
|
||||||
geth.NewEVM,
|
app.stakingKeeper,
|
||||||
|
app.feeMarketKeeper,
|
||||||
options.EVMTrace,
|
options.EVMTrace,
|
||||||
evmSubspace,
|
evmSubspace,
|
||||||
|
precompiles,
|
||||||
)
|
)
|
||||||
|
|
||||||
app.evmutilKeeper.SetEvmKeeper(app.evmKeeper)
|
app.evmutilKeeper.SetEvmKeeper(app.evmKeeper)
|
||||||
|
|
||||||
// It's important to note that the PFM Keeper must be initialized before the Transfer Keeper
|
// It's important to note that the PFM Keeper must be initialized before the Transfer Keeper
|
||||||
app.packetForwardKeeper = packetforwardkeeper.NewKeeper(
|
app.packetForwardKeeper = packetforwardkeeper.NewKeeper(
|
||||||
appCodec,
|
appCodec,
|
||||||
@ -602,13 +544,6 @@ func NewApp(
|
|||||||
ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferStack)
|
ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferStack)
|
||||||
app.ibcKeeper.SetRouter(ibcRouter)
|
app.ibcKeeper.SetRouter(ibcRouter)
|
||||||
|
|
||||||
app.auctionKeeper = auctionkeeper.NewKeeper(
|
|
||||||
appCodec,
|
|
||||||
keys[auctiontypes.StoreKey],
|
|
||||||
auctionSubspace,
|
|
||||||
app.bankKeeper,
|
|
||||||
app.accountKeeper,
|
|
||||||
)
|
|
||||||
app.issuanceKeeper = issuancekeeper.NewKeeper(
|
app.issuanceKeeper = issuancekeeper.NewKeeper(
|
||||||
appCodec,
|
appCodec,
|
||||||
keys[issuancetypes.StoreKey],
|
keys[issuancetypes.StoreKey],
|
||||||
@ -629,68 +564,6 @@ func NewApp(
|
|||||||
keys[pricefeedtypes.StoreKey],
|
keys[pricefeedtypes.StoreKey],
|
||||||
pricefeedSubspace,
|
pricefeedSubspace,
|
||||||
)
|
)
|
||||||
swapKeeper := swapkeeper.NewKeeper(
|
|
||||||
appCodec,
|
|
||||||
keys[swaptypes.StoreKey],
|
|
||||||
swapSubspace,
|
|
||||||
app.accountKeeper,
|
|
||||||
app.bankKeeper,
|
|
||||||
)
|
|
||||||
cdpKeeper := cdpkeeper.NewKeeper(
|
|
||||||
appCodec,
|
|
||||||
keys[cdptypes.StoreKey],
|
|
||||||
cdpSubspace,
|
|
||||||
app.pricefeedKeeper,
|
|
||||||
app.auctionKeeper,
|
|
||||||
app.bankKeeper,
|
|
||||||
app.accountKeeper,
|
|
||||||
mAccPerms,
|
|
||||||
)
|
|
||||||
hardKeeper := hardkeeper.NewKeeper(
|
|
||||||
appCodec,
|
|
||||||
keys[hardtypes.StoreKey],
|
|
||||||
hardSubspace,
|
|
||||||
app.accountKeeper,
|
|
||||||
app.bankKeeper,
|
|
||||||
app.pricefeedKeeper,
|
|
||||||
app.auctionKeeper,
|
|
||||||
)
|
|
||||||
app.liquidKeeper = liquidkeeper.NewDefaultKeeper(
|
|
||||||
appCodec,
|
|
||||||
app.accountKeeper,
|
|
||||||
app.bankKeeper,
|
|
||||||
app.stakingKeeper,
|
|
||||||
&app.distrKeeper,
|
|
||||||
)
|
|
||||||
savingsKeeper := savingskeeper.NewKeeper(
|
|
||||||
appCodec,
|
|
||||||
keys[savingstypes.StoreKey],
|
|
||||||
savingsSubspace,
|
|
||||||
app.accountKeeper,
|
|
||||||
app.bankKeeper,
|
|
||||||
app.liquidKeeper,
|
|
||||||
)
|
|
||||||
earnKeeper := earnkeeper.NewKeeper(
|
|
||||||
appCodec,
|
|
||||||
keys[earntypes.StoreKey],
|
|
||||||
earnSubspace,
|
|
||||||
app.accountKeeper,
|
|
||||||
app.bankKeeper,
|
|
||||||
&app.liquidKeeper,
|
|
||||||
&hardKeeper,
|
|
||||||
&savingsKeeper,
|
|
||||||
&app.distrKeeper,
|
|
||||||
)
|
|
||||||
|
|
||||||
app.kavadistKeeper = kavadistkeeper.NewKeeper(
|
|
||||||
appCodec,
|
|
||||||
keys[kavadisttypes.StoreKey],
|
|
||||||
kavadistSubspace,
|
|
||||||
app.bankKeeper,
|
|
||||||
app.accountKeeper,
|
|
||||||
app.distrKeeper,
|
|
||||||
app.loadBlockedMaccAddrs(),
|
|
||||||
)
|
|
||||||
|
|
||||||
app.mintKeeper = mintkeeper.NewKeeper(
|
app.mintKeeper = mintkeeper.NewKeeper(
|
||||||
appCodec,
|
appCodec,
|
||||||
@ -702,49 +575,10 @@ func NewApp(
|
|||||||
govAuthAddrStr,
|
govAuthAddrStr,
|
||||||
)
|
)
|
||||||
|
|
||||||
// x/community's deposit/withdraw to lend proposals depend on hard keeper.
|
|
||||||
app.communityKeeper = communitykeeper.NewKeeper(
|
|
||||||
appCodec,
|
|
||||||
keys[communitytypes.StoreKey],
|
|
||||||
app.accountKeeper,
|
|
||||||
app.bankKeeper,
|
|
||||||
&cdpKeeper,
|
|
||||||
app.distrKeeper,
|
|
||||||
&hardKeeper,
|
|
||||||
&app.mintKeeper,
|
|
||||||
&app.kavadistKeeper,
|
|
||||||
app.stakingKeeper,
|
|
||||||
govAuthAddr,
|
|
||||||
)
|
|
||||||
|
|
||||||
app.incentiveKeeper = incentivekeeper.NewKeeper(
|
|
||||||
appCodec,
|
|
||||||
keys[incentivetypes.StoreKey],
|
|
||||||
incentiveSubspace,
|
|
||||||
app.bankKeeper,
|
|
||||||
&cdpKeeper,
|
|
||||||
&hardKeeper,
|
|
||||||
app.accountKeeper,
|
|
||||||
app.stakingKeeper,
|
|
||||||
&swapKeeper,
|
|
||||||
&savingsKeeper,
|
|
||||||
&app.liquidKeeper,
|
|
||||||
&earnKeeper,
|
|
||||||
app.mintKeeper,
|
|
||||||
app.distrKeeper,
|
|
||||||
app.pricefeedKeeper,
|
|
||||||
)
|
|
||||||
app.routerKeeper = routerkeeper.NewKeeper(
|
|
||||||
&app.earnKeeper,
|
|
||||||
app.liquidKeeper,
|
|
||||||
app.stakingKeeper,
|
|
||||||
)
|
|
||||||
|
|
||||||
// create committee keeper with router
|
// create committee keeper with router
|
||||||
committeeGovRouter := govv1beta1.NewRouter()
|
committeeGovRouter := govv1beta1.NewRouter()
|
||||||
committeeGovRouter.
|
committeeGovRouter.
|
||||||
AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler).
|
AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler).
|
||||||
AddRoute(communitytypes.RouterKey, community.NewCommunityPoolProposalHandler(app.communityKeeper)).
|
|
||||||
AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.paramsKeeper)).
|
AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.paramsKeeper)).
|
||||||
AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(&app.upgradeKeeper))
|
AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(&app.upgradeKeeper))
|
||||||
// Note: the committee proposal handler is not registered on the committee router. This means committees cannot create or update other committees.
|
// Note: the committee proposal handler is not registered on the committee router. This means committees cannot create or update other committees.
|
||||||
@ -763,15 +597,8 @@ func NewApp(
|
|||||||
stakingtypes.NewMultiStakingHooks(
|
stakingtypes.NewMultiStakingHooks(
|
||||||
app.distrKeeper.Hooks(),
|
app.distrKeeper.Hooks(),
|
||||||
app.slashingKeeper.Hooks(),
|
app.slashingKeeper.Hooks(),
|
||||||
app.incentiveKeeper.Hooks(),
|
|
||||||
))
|
))
|
||||||
|
|
||||||
app.swapKeeper = *swapKeeper.SetHooks(app.incentiveKeeper.Hooks())
|
|
||||||
app.cdpKeeper = *cdpKeeper.SetHooks(cdptypes.NewMultiCDPHooks(app.incentiveKeeper.Hooks()))
|
|
||||||
app.hardKeeper = *hardKeeper.SetHooks(hardtypes.NewMultiHARDHooks(app.incentiveKeeper.Hooks()))
|
|
||||||
app.savingsKeeper = savingsKeeper // savings incentive hooks disabled
|
|
||||||
app.earnKeeper = *earnKeeper.SetHooks(app.incentiveKeeper.Hooks())
|
|
||||||
|
|
||||||
// create gov keeper with router
|
// create gov keeper with router
|
||||||
// NOTE this must be done after any keepers referenced in the gov router (ie committee) are defined
|
// NOTE this must be done after any keepers referenced in the gov router (ie committee) are defined
|
||||||
govRouter := govv1beta1.NewRouter()
|
govRouter := govv1beta1.NewRouter()
|
||||||
@ -780,9 +607,6 @@ func NewApp(
|
|||||||
AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.paramsKeeper)).
|
AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.paramsKeeper)).
|
||||||
AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(&app.upgradeKeeper)).
|
AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(&app.upgradeKeeper)).
|
||||||
AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.ibcKeeper.ClientKeeper)).
|
AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.ibcKeeper.ClientKeeper)).
|
||||||
AddRoute(kavadisttypes.RouterKey, kavadist.NewCommunityPoolMultiSpendProposalHandler(app.kavadistKeeper)).
|
|
||||||
AddRoute(earntypes.RouterKey, earn.NewCommunityPoolProposalHandler(app.earnKeeper)).
|
|
||||||
AddRoute(communitytypes.RouterKey, community.NewCommunityPoolProposalHandler(app.communityKeeper)).
|
|
||||||
AddRoute(committeetypes.RouterKey, committee.NewProposalHandler(app.committeeKeeper))
|
AddRoute(committeetypes.RouterKey, committee.NewProposalHandler(app.committeeKeeper))
|
||||||
|
|
||||||
govConfig := govtypes.DefaultConfig()
|
govConfig := govtypes.DefaultConfig()
|
||||||
@ -801,11 +625,14 @@ func NewApp(
|
|||||||
|
|
||||||
// override x/gov tally handler with custom implementation
|
// override x/gov tally handler with custom implementation
|
||||||
tallyHandler := NewTallyHandler(
|
tallyHandler := NewTallyHandler(
|
||||||
app.govKeeper, *app.stakingKeeper, app.savingsKeeper, app.earnKeeper,
|
app.govKeeper, *app.stakingKeeper, app.bankKeeper,
|
||||||
app.liquidKeeper, app.bankKeeper,
|
|
||||||
)
|
)
|
||||||
app.govKeeper.SetTallyHandler(tallyHandler)
|
app.govKeeper.SetTallyHandler(tallyHandler)
|
||||||
|
|
||||||
|
app.CouncilKeeper = councilkeeper.NewKeeper(
|
||||||
|
keys[counciltypes.StoreKey], appCodec, app.stakingKeeper,
|
||||||
|
)
|
||||||
|
|
||||||
// create the module manager (Note: Any module instantiated in the module manager that is later modified
|
// create the module manager (Note: Any module instantiated in the module manager that is later modified
|
||||||
// must be passed by reference here.)
|
// must be passed by reference here.)
|
||||||
app.mm = module.NewManager(
|
app.mm = module.NewManager(
|
||||||
@ -827,33 +654,23 @@ func NewApp(
|
|||||||
upgrade.NewAppModule(&app.upgradeKeeper),
|
upgrade.NewAppModule(&app.upgradeKeeper),
|
||||||
evidence.NewAppModule(app.evidenceKeeper),
|
evidence.NewAppModule(app.evidenceKeeper),
|
||||||
transferModule,
|
transferModule,
|
||||||
vesting.NewAppModule(app.accountKeeper, app.bankKeeper),
|
vesting.NewAppModule(app.accountKeeper, app.bankKeeper, app.vestingKeeper),
|
||||||
authzmodule.NewAppModule(appCodec, app.authzKeeper, app.accountKeeper, app.bankKeeper, app.interfaceRegistry),
|
authzmodule.NewAppModule(appCodec, app.authzKeeper, app.accountKeeper, app.bankKeeper, app.interfaceRegistry),
|
||||||
kavadist.NewAppModule(app.kavadistKeeper, app.accountKeeper),
|
|
||||||
auction.NewAppModule(app.auctionKeeper, app.accountKeeper, app.bankKeeper),
|
|
||||||
issuance.NewAppModule(app.issuanceKeeper, app.accountKeeper, app.bankKeeper),
|
issuance.NewAppModule(app.issuanceKeeper, app.accountKeeper, app.bankKeeper),
|
||||||
bep3.NewAppModule(app.bep3Keeper, app.accountKeeper, app.bankKeeper),
|
bep3.NewAppModule(app.bep3Keeper, app.accountKeeper, app.bankKeeper),
|
||||||
pricefeed.NewAppModule(app.pricefeedKeeper, app.accountKeeper),
|
pricefeed.NewAppModule(app.pricefeedKeeper, app.accountKeeper),
|
||||||
validatorvesting.NewAppModule(app.bankKeeper),
|
validatorvesting.NewAppModule(app.bankKeeper),
|
||||||
swap.NewAppModule(app.swapKeeper, app.accountKeeper),
|
|
||||||
cdp.NewAppModule(app.cdpKeeper, app.accountKeeper, app.pricefeedKeeper, app.bankKeeper),
|
|
||||||
hard.NewAppModule(app.hardKeeper, app.accountKeeper, app.bankKeeper, app.pricefeedKeeper),
|
|
||||||
committee.NewAppModule(app.committeeKeeper, app.accountKeeper),
|
committee.NewAppModule(app.committeeKeeper, app.accountKeeper),
|
||||||
incentive.NewAppModule(app.incentiveKeeper, app.accountKeeper, app.bankKeeper, app.cdpKeeper),
|
|
||||||
evmutil.NewAppModule(app.evmutilKeeper, app.bankKeeper, app.accountKeeper),
|
evmutil.NewAppModule(app.evmutilKeeper, app.bankKeeper, app.accountKeeper),
|
||||||
savings.NewAppModule(app.savingsKeeper, app.accountKeeper, app.bankKeeper),
|
|
||||||
liquid.NewAppModule(app.liquidKeeper),
|
|
||||||
earn.NewAppModule(app.earnKeeper, app.accountKeeper, app.bankKeeper),
|
|
||||||
router.NewAppModule(app.routerKeeper),
|
|
||||||
// nil InflationCalculationFn, use SDK's default inflation function
|
// nil InflationCalculationFn, use SDK's default inflation function
|
||||||
mint.NewAppModule(appCodec, app.mintKeeper, app.accountKeeper, nil, mintSubspace),
|
mint.NewAppModule(appCodec, app.mintKeeper, app.accountKeeper, nil, mintSubspace),
|
||||||
community.NewAppModule(app.communityKeeper, app.accountKeeper),
|
|
||||||
metrics.NewAppModule(options.TelemetryOptions),
|
council.NewAppModule(app.CouncilKeeper, *app.stakingKeeper),
|
||||||
|
dasigners.NewAppModule(app.dasignersKeeper, *app.stakingKeeper),
|
||||||
)
|
)
|
||||||
|
|
||||||
// Warning: Some begin blockers must run before others. Ensure the dependencies are understood before modifying this list.
|
// Warning: Some begin blockers must run before others. Ensure the dependencies are understood before modifying this list.
|
||||||
app.mm.SetOrderBeginBlockers(
|
app.mm.SetOrderBeginBlockers(
|
||||||
metricstypes.ModuleName,
|
|
||||||
// Upgrade begin blocker runs migrations on the first block after an upgrade. It should run before any other module.
|
// Upgrade begin blocker runs migrations on the first block after an upgrade. It should run before any other module.
|
||||||
upgradetypes.ModuleName,
|
upgradetypes.ModuleName,
|
||||||
// Capability begin blocker runs non state changing initialization.
|
// Capability begin blocker runs non state changing initialization.
|
||||||
@ -863,7 +680,6 @@ func NewApp(
|
|||||||
committeetypes.ModuleName,
|
committeetypes.ModuleName,
|
||||||
// Community begin blocker should run before x/mint and x/kavadist since
|
// Community begin blocker should run before x/mint and x/kavadist since
|
||||||
// the disable inflation upgrade will update those modules' params.
|
// the disable inflation upgrade will update those modules' params.
|
||||||
communitytypes.ModuleName,
|
|
||||||
minttypes.ModuleName,
|
minttypes.ModuleName,
|
||||||
distrtypes.ModuleName,
|
distrtypes.ModuleName,
|
||||||
// During begin block slashing happens after distr.BeginBlocker so that
|
// During begin block slashing happens after distr.BeginBlocker so that
|
||||||
@ -874,18 +690,12 @@ func NewApp(
|
|||||||
stakingtypes.ModuleName,
|
stakingtypes.ModuleName,
|
||||||
feemarkettypes.ModuleName,
|
feemarkettypes.ModuleName,
|
||||||
evmtypes.ModuleName,
|
evmtypes.ModuleName,
|
||||||
kavadisttypes.ModuleName,
|
|
||||||
// Auction begin blocker will close out expired auctions and pay debt back to cdp.
|
// Auction begin blocker will close out expired auctions and pay debt back to cdp.
|
||||||
// It should be run before cdp begin blocker which cancels out debt with stable and starts more auctions.
|
// It should be run before cdp begin blocker which cancels out debt with stable and starts more auctions.
|
||||||
auctiontypes.ModuleName,
|
|
||||||
cdptypes.ModuleName,
|
|
||||||
bep3types.ModuleName,
|
bep3types.ModuleName,
|
||||||
hardtypes.ModuleName,
|
|
||||||
issuancetypes.ModuleName,
|
issuancetypes.ModuleName,
|
||||||
incentivetypes.ModuleName,
|
|
||||||
ibcexported.ModuleName,
|
ibcexported.ModuleName,
|
||||||
// Add all remaining modules with an empty begin blocker below since cosmos 0.45.0 requires it
|
// Add all remaining modules with an empty begin blocker below since cosmos 0.45.0 requires it
|
||||||
swaptypes.ModuleName,
|
|
||||||
vestingtypes.ModuleName,
|
vestingtypes.ModuleName,
|
||||||
pricefeedtypes.ModuleName,
|
pricefeedtypes.ModuleName,
|
||||||
validatorvestingtypes.ModuleName,
|
validatorvestingtypes.ModuleName,
|
||||||
@ -898,11 +708,10 @@ func NewApp(
|
|||||||
paramstypes.ModuleName,
|
paramstypes.ModuleName,
|
||||||
authz.ModuleName,
|
authz.ModuleName,
|
||||||
evmutiltypes.ModuleName,
|
evmutiltypes.ModuleName,
|
||||||
savingstypes.ModuleName,
|
|
||||||
liquidtypes.ModuleName,
|
|
||||||
earntypes.ModuleName,
|
|
||||||
routertypes.ModuleName,
|
|
||||||
consensusparamtypes.ModuleName,
|
consensusparamtypes.ModuleName,
|
||||||
|
|
||||||
|
counciltypes.ModuleName,
|
||||||
|
dasignerstypes.ModuleName,
|
||||||
packetforwardtypes.ModuleName,
|
packetforwardtypes.ModuleName,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -917,19 +726,13 @@ func NewApp(
|
|||||||
pricefeedtypes.ModuleName,
|
pricefeedtypes.ModuleName,
|
||||||
// Add all remaining modules with an empty end blocker below since cosmos 0.45.0 requires it
|
// Add all remaining modules with an empty end blocker below since cosmos 0.45.0 requires it
|
||||||
capabilitytypes.ModuleName,
|
capabilitytypes.ModuleName,
|
||||||
incentivetypes.ModuleName,
|
|
||||||
issuancetypes.ModuleName,
|
issuancetypes.ModuleName,
|
||||||
slashingtypes.ModuleName,
|
slashingtypes.ModuleName,
|
||||||
distrtypes.ModuleName,
|
distrtypes.ModuleName,
|
||||||
auctiontypes.ModuleName,
|
|
||||||
bep3types.ModuleName,
|
bep3types.ModuleName,
|
||||||
cdptypes.ModuleName,
|
|
||||||
hardtypes.ModuleName,
|
|
||||||
committeetypes.ModuleName,
|
committeetypes.ModuleName,
|
||||||
upgradetypes.ModuleName,
|
upgradetypes.ModuleName,
|
||||||
evidencetypes.ModuleName,
|
evidencetypes.ModuleName,
|
||||||
kavadisttypes.ModuleName,
|
|
||||||
swaptypes.ModuleName,
|
|
||||||
vestingtypes.ModuleName,
|
vestingtypes.ModuleName,
|
||||||
ibcexported.ModuleName,
|
ibcexported.ModuleName,
|
||||||
validatorvestingtypes.ModuleName,
|
validatorvestingtypes.ModuleName,
|
||||||
@ -940,14 +743,10 @@ func NewApp(
|
|||||||
paramstypes.ModuleName,
|
paramstypes.ModuleName,
|
||||||
authz.ModuleName,
|
authz.ModuleName,
|
||||||
evmutiltypes.ModuleName,
|
evmutiltypes.ModuleName,
|
||||||
savingstypes.ModuleName,
|
|
||||||
liquidtypes.ModuleName,
|
|
||||||
earntypes.ModuleName,
|
|
||||||
routertypes.ModuleName,
|
|
||||||
minttypes.ModuleName,
|
minttypes.ModuleName,
|
||||||
communitytypes.ModuleName,
|
|
||||||
metricstypes.ModuleName,
|
|
||||||
consensusparamtypes.ModuleName,
|
consensusparamtypes.ModuleName,
|
||||||
|
counciltypes.ModuleName,
|
||||||
|
dasignerstypes.ModuleName,
|
||||||
packetforwardtypes.ModuleName,
|
packetforwardtypes.ModuleName,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -967,32 +766,21 @@ func NewApp(
|
|||||||
ibctransfertypes.ModuleName,
|
ibctransfertypes.ModuleName,
|
||||||
evmtypes.ModuleName,
|
evmtypes.ModuleName,
|
||||||
feemarkettypes.ModuleName,
|
feemarkettypes.ModuleName,
|
||||||
kavadisttypes.ModuleName,
|
|
||||||
auctiontypes.ModuleName,
|
|
||||||
issuancetypes.ModuleName,
|
issuancetypes.ModuleName,
|
||||||
savingstypes.ModuleName,
|
|
||||||
bep3types.ModuleName,
|
bep3types.ModuleName,
|
||||||
pricefeedtypes.ModuleName,
|
pricefeedtypes.ModuleName,
|
||||||
swaptypes.ModuleName,
|
|
||||||
cdptypes.ModuleName, // reads market prices, so must run after pricefeed genesis
|
|
||||||
hardtypes.ModuleName,
|
|
||||||
incentivetypes.ModuleName, // reads cdp params, so must run after cdp genesis
|
|
||||||
committeetypes.ModuleName,
|
committeetypes.ModuleName,
|
||||||
evmutiltypes.ModuleName,
|
evmutiltypes.ModuleName,
|
||||||
earntypes.ModuleName,
|
|
||||||
communitytypes.ModuleName,
|
|
||||||
genutiltypes.ModuleName, // runs arbitrary txs included in genisis state, so run after modules have been initialized
|
genutiltypes.ModuleName, // runs arbitrary txs included in genisis state, so run after modules have been initialized
|
||||||
// Add all remaining modules with an empty InitGenesis below since cosmos 0.45.0 requires it
|
// Add all remaining modules with an empty InitGenesis below since cosmos 0.45.0 requires it
|
||||||
vestingtypes.ModuleName,
|
vestingtypes.ModuleName,
|
||||||
paramstypes.ModuleName,
|
paramstypes.ModuleName,
|
||||||
upgradetypes.ModuleName,
|
upgradetypes.ModuleName,
|
||||||
validatorvestingtypes.ModuleName,
|
validatorvestingtypes.ModuleName,
|
||||||
liquidtypes.ModuleName,
|
|
||||||
routertypes.ModuleName,
|
|
||||||
metricstypes.ModuleName,
|
|
||||||
consensusparamtypes.ModuleName,
|
consensusparamtypes.ModuleName,
|
||||||
|
counciltypes.ModuleName,
|
||||||
|
dasignerstypes.ModuleName,
|
||||||
packetforwardtypes.ModuleName,
|
packetforwardtypes.ModuleName,
|
||||||
crisistypes.ModuleName, // runs the invariants at genesis, should run after other modules
|
|
||||||
)
|
)
|
||||||
|
|
||||||
app.mm.RegisterInvariants(&app.crisisKeeper)
|
app.mm.RegisterInvariants(&app.crisisKeeper)
|
||||||
@ -1094,7 +882,7 @@ func (app *App) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.Res
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store current module versions in kava-10 to setup future in-place upgrades.
|
// Store current module versions in 0gChain-10 to setup future in-place upgrades.
|
||||||
// During in-place migrations, the old module versions in the store will be referenced to determine which migrations to run.
|
// During in-place migrations, the old module versions in the store will be referenced to determine which migrations to run.
|
||||||
app.upgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap())
|
app.upgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap())
|
||||||
|
|
||||||
@ -1156,7 +944,7 @@ func RegisterAPIRouteRewrites(router *mux.Router) {
|
|||||||
// Eg: querying /cosmos/distribution/v1beta1/community_pool will return
|
// Eg: querying /cosmos/distribution/v1beta1/community_pool will return
|
||||||
// the same response as querying /kava/community/v1beta1/total_balance
|
// the same response as querying /kava/community/v1beta1/total_balance
|
||||||
routeMap := map[string]string{
|
routeMap := map[string]string{
|
||||||
"/cosmos/distribution/v1beta1/community_pool": "/kava/community/v1beta1/total_balance",
|
"/cosmos/distribution/v1beta1/community_pool": "/0g/community/v1beta1/total_balance",
|
||||||
}
|
}
|
||||||
|
|
||||||
for clientPath, backendPath := range routeMap {
|
for clientPath, backendPath := range routeMap {
|
||||||
@ -1197,16 +985,6 @@ func (app *App) RegisterNodeService(clientCtx client.Context) {
|
|||||||
func (app *App) loadBlockedMaccAddrs() map[string]bool {
|
func (app *App) loadBlockedMaccAddrs() map[string]bool {
|
||||||
modAccAddrs := app.ModuleAccountAddrs()
|
modAccAddrs := app.ModuleAccountAddrs()
|
||||||
allowedMaccs := map[string]bool{
|
allowedMaccs := map[string]bool{
|
||||||
// kavadist
|
|
||||||
app.accountKeeper.GetModuleAddress(kavadisttypes.ModuleName).String(): true,
|
|
||||||
// earn
|
|
||||||
app.accountKeeper.GetModuleAddress(earntypes.ModuleName).String(): true,
|
|
||||||
// liquid
|
|
||||||
app.accountKeeper.GetModuleAddress(liquidtypes.ModuleName).String(): true,
|
|
||||||
// kavadist fund
|
|
||||||
app.accountKeeper.GetModuleAddress(kavadisttypes.FundModuleAccount).String(): true,
|
|
||||||
// community
|
|
||||||
app.accountKeeper.GetModuleAddress(communitytypes.ModuleAccountName).String(): true,
|
|
||||||
// NOTE: if adding evmutil, adjust the cosmos-coins-fully-backed-invariant accordingly.
|
// NOTE: if adding evmutil, adjust the cosmos-coins-fully-backed-invariant accordingly.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ package app
|
|||||||
import (
|
import (
|
||||||
enccodec "github.com/evmos/ethermint/encoding/codec"
|
enccodec "github.com/evmos/ethermint/encoding/codec"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app/params"
|
"github.com/0glabs/0g-chain/app/params"
|
||||||
)
|
)
|
||||||
|
|
||||||
// MakeEncodingConfig creates an EncodingConfig and registers the app's types on it.
|
// MakeEncodingConfig creates an EncodingConfig and registers the app's types on it.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Package params defines the simulation parameters for the Kava app.
|
Package params defines the simulation parameters for the 0gChain app.
|
||||||
|
|
||||||
It contains the default weights used for each transaction used on the module's
|
It contains the default weights used for each transaction used on the module's
|
||||||
simulation. These weights define the chance for a transaction to be simulated at
|
simulation. These weights define the chance for a transaction to be simulated at
|
||||||
|
@ -8,10 +8,6 @@ import (
|
|||||||
govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
|
govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
|
||||||
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
|
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
|
||||||
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||||
earnkeeper "github.com/kava-labs/kava/x/earn/keeper"
|
|
||||||
liquidkeeper "github.com/kava-labs/kava/x/liquid/keeper"
|
|
||||||
liquidtypes "github.com/kava-labs/kava/x/liquid/types"
|
|
||||||
savingskeeper "github.com/kava-labs/kava/x/savings/keeper"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ govv1.TallyHandler = TallyHandler{}
|
var _ govv1.TallyHandler = TallyHandler{}
|
||||||
@ -20,23 +16,16 @@ var _ govv1.TallyHandler = TallyHandler{}
|
|||||||
type TallyHandler struct {
|
type TallyHandler struct {
|
||||||
gk govkeeper.Keeper
|
gk govkeeper.Keeper
|
||||||
stk stakingkeeper.Keeper
|
stk stakingkeeper.Keeper
|
||||||
svk savingskeeper.Keeper
|
|
||||||
ek earnkeeper.Keeper
|
|
||||||
lk liquidkeeper.Keeper
|
|
||||||
bk bankkeeper.Keeper
|
bk bankkeeper.Keeper
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewTallyHandler creates a new tally handler.
|
// NewTallyHandler creates a new tally handler.
|
||||||
func NewTallyHandler(
|
func NewTallyHandler(
|
||||||
gk govkeeper.Keeper, stk stakingkeeper.Keeper, svk savingskeeper.Keeper,
|
gk govkeeper.Keeper, stk stakingkeeper.Keeper, bk bankkeeper.Keeper,
|
||||||
ek earnkeeper.Keeper, lk liquidkeeper.Keeper, bk bankkeeper.Keeper,
|
|
||||||
) TallyHandler {
|
) TallyHandler {
|
||||||
return TallyHandler{
|
return TallyHandler{
|
||||||
gk: gk,
|
gk: gk,
|
||||||
stk: stk,
|
stk: stk,
|
||||||
svk: svk,
|
|
||||||
ek: ek,
|
|
||||||
lk: lk,
|
|
||||||
bk: bk,
|
bk: bk,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -105,34 +94,34 @@ func (th TallyHandler) Tally(
|
|||||||
})
|
})
|
||||||
|
|
||||||
// get voter bkava and update total voting power and results
|
// get voter bkava and update total voting power and results
|
||||||
addrBkava := th.getAddrBkava(ctx, voter).toCoins()
|
// addrBkava := th.getAddrBkava(ctx, voter).toCoins()
|
||||||
for _, coin := range addrBkava {
|
// for _, coin := range addrBkava {
|
||||||
valAddr, err := liquidtypes.ParseLiquidStakingTokenDenom(coin.Denom)
|
// valAddr, err := liquidtypes.ParseLiquidStakingTokenDenom(coin.Denom)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
break
|
// break
|
||||||
}
|
// }
|
||||||
|
|
||||||
// reduce delegator shares by the amount of voter bkava for the validator
|
// // reduce delegator shares by the amount of voter bkava for the validator
|
||||||
valAddrStr := valAddr.String()
|
// valAddrStr := valAddr.String()
|
||||||
if val, ok := currValidators[valAddrStr]; ok {
|
// if val, ok := currValidators[valAddrStr]; ok {
|
||||||
val.DelegatorDeductions = val.DelegatorDeductions.Add(sdk.NewDecFromInt(coin.Amount))
|
// val.DelegatorDeductions = val.DelegatorDeductions.Add(sdk.NewDecFromInt(coin.Amount))
|
||||||
currValidators[valAddrStr] = val
|
// currValidators[valAddrStr] = val
|
||||||
}
|
// }
|
||||||
|
|
||||||
// votingPower = amount of ukava coin
|
// // votingPower = amount of ukava coin
|
||||||
stakedCoins, err := th.lk.GetStakedTokensForDerivatives(ctx, sdk.NewCoins(coin))
|
// stakedCoins, err := th.lk.GetStakedTokensForDerivatives(ctx, sdk.NewCoins(coin))
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
// error is returned only if the bkava denom is incorrect, which should never happen here.
|
// // error is returned only if the bkava denom is incorrect, which should never happen here.
|
||||||
panic(err)
|
// panic(err)
|
||||||
}
|
// }
|
||||||
votingPower := sdk.NewDecFromInt(stakedCoins.Amount)
|
// votingPower := sdk.NewDecFromInt(stakedCoins.Amount)
|
||||||
|
|
||||||
for _, option := range vote.Options {
|
// for _, option := range vote.Options {
|
||||||
subPower := votingPower.Mul(sdk.MustNewDecFromStr(option.Weight))
|
// subPower := votingPower.Mul(sdk.MustNewDecFromStr(option.Weight))
|
||||||
results[option.Option] = results[option.Option].Add(subPower)
|
// results[option.Option] = results[option.Option].Add(subPower)
|
||||||
}
|
// }
|
||||||
totalVotingPower = totalVotingPower.Add(votingPower)
|
// totalVotingPower = totalVotingPower.Add(votingPower)
|
||||||
}
|
// }
|
||||||
|
|
||||||
th.gk.DeleteVote(ctx, vote.ProposalId, voter)
|
th.gk.DeleteVote(ctx, vote.ProposalId, voter)
|
||||||
return false
|
return false
|
||||||
@ -219,38 +208,38 @@ func (th TallyHandler) getAddrBkava(ctx sdk.Context, addr sdk.AccAddress) bkavaB
|
|||||||
|
|
||||||
// addBkavaFromWallet adds all addr balances of bkava in x/bank.
|
// addBkavaFromWallet adds all addr balances of bkava in x/bank.
|
||||||
func (th TallyHandler) addBkavaFromWallet(ctx sdk.Context, addr sdk.AccAddress, bkava bkavaByDenom) {
|
func (th TallyHandler) addBkavaFromWallet(ctx sdk.Context, addr sdk.AccAddress, bkava bkavaByDenom) {
|
||||||
coins := th.bk.GetAllBalances(ctx, addr)
|
// coins := th.bk.GetAllBalances(ctx, addr)
|
||||||
for _, coin := range coins {
|
// for _, coin := range coins {
|
||||||
if th.lk.IsDerivativeDenom(ctx, coin.Denom) {
|
// if th.lk.IsDerivativeDenom(ctx, coin.Denom) {
|
||||||
bkava.add(coin)
|
// bkava.add(coin)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
// addBkavaFromSavings adds all addr deposits of bkava in x/savings.
|
// addBkavaFromSavings adds all addr deposits of bkava in x/savings.
|
||||||
func (th TallyHandler) addBkavaFromSavings(ctx sdk.Context, addr sdk.AccAddress, bkava bkavaByDenom) {
|
func (th TallyHandler) addBkavaFromSavings(ctx sdk.Context, addr sdk.AccAddress, bkava bkavaByDenom) {
|
||||||
deposit, found := th.svk.GetDeposit(ctx, addr)
|
// deposit, found := th.svk.GetDeposit(ctx, addr)
|
||||||
if !found {
|
// if !found {
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
for _, coin := range deposit.Amount {
|
// for _, coin := range deposit.Amount {
|
||||||
if th.lk.IsDerivativeDenom(ctx, coin.Denom) {
|
// if th.lk.IsDerivativeDenom(ctx, coin.Denom) {
|
||||||
bkava.add(coin)
|
// bkava.add(coin)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
// addBkavaFromEarn adds all addr deposits of bkava in x/earn.
|
// addBkavaFromEarn adds all addr deposits of bkava in x/earn.
|
||||||
func (th TallyHandler) addBkavaFromEarn(ctx sdk.Context, addr sdk.AccAddress, bkava bkavaByDenom) {
|
func (th TallyHandler) addBkavaFromEarn(ctx sdk.Context, addr sdk.AccAddress, bkava bkavaByDenom) {
|
||||||
shares, found := th.ek.GetVaultAccountShares(ctx, addr)
|
// shares, found := th.ek.GetVaultAccountShares(ctx, addr)
|
||||||
if !found {
|
// if !found {
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
for _, share := range shares {
|
// for _, share := range shares {
|
||||||
if th.lk.IsDerivativeDenom(ctx, share.Denom) {
|
// if th.lk.IsDerivativeDenom(ctx, share.Denom) {
|
||||||
if coin, err := th.ek.ConvertToAssets(ctx, share); err == nil {
|
// if coin, err := th.ek.ConvertToAssets(ctx, share); err == nil {
|
||||||
bkava.add(coin)
|
// bkava.add(coin)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
@ -16,9 +16,6 @@ import (
|
|||||||
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
|
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
|
||||||
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
earntypes "github.com/kava-labs/kava/x/earn/types"
|
|
||||||
liquidtypes "github.com/kava-labs/kava/x/liquid/types"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// d is an alias for sdk.MustNewDecFromStr
|
// d is an alias for sdk.MustNewDecFromStr
|
||||||
@ -51,9 +48,6 @@ func (suite *tallyHandlerSuite) SetupTest() {
|
|||||||
suite.tallier = NewTallyHandler(
|
suite.tallier = NewTallyHandler(
|
||||||
suite.app.GetGovKeeper(),
|
suite.app.GetGovKeeper(),
|
||||||
stakingKeeper,
|
stakingKeeper,
|
||||||
suite.app.GetSavingsKeeper(),
|
|
||||||
suite.app.GetEarnKeeper(),
|
|
||||||
suite.app.GetLiquidKeeper(),
|
|
||||||
suite.app.GetBankKeeper(),
|
suite.app.GetBankKeeper(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -271,39 +265,40 @@ func (suite *tallyHandlerSuite) newBondCoin(amount sdkmath.Int) sdk.Coin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *tallyHandlerSuite) allowBKavaEarnDeposits() {
|
func (suite *tallyHandlerSuite) allowBKavaEarnDeposits() {
|
||||||
ek := suite.app.GetEarnKeeper()
|
// ek := suite.app.GetEarnKeeper()
|
||||||
earnParams := ek.GetParams(suite.ctx)
|
// earnParams := ek.GetParams(suite.ctx)
|
||||||
|
|
||||||
vault := earntypes.NewAllowedVault(
|
// vault := earntypes.NewAllowedVault(
|
||||||
liquidtypes.DefaultDerivativeDenom,
|
// liquidtypes.DefaultDerivativeDenom,
|
||||||
earntypes.StrategyTypes{earntypes.STRATEGY_TYPE_SAVINGS},
|
// earntypes.StrategyTypes{earntypes.STRATEGY_TYPE_SAVINGS},
|
||||||
false,
|
// false,
|
||||||
nil,
|
// nil,
|
||||||
)
|
// )
|
||||||
|
|
||||||
earnParams.AllowedVaults = append(earnParams.AllowedVaults, vault)
|
// earnParams.AllowedVaults = append(earnParams.AllowedVaults, vault)
|
||||||
ek.SetParams(suite.ctx, earnParams)
|
// ek.SetParams(suite.ctx, earnParams)
|
||||||
|
|
||||||
sk := suite.app.GetSavingsKeeper()
|
// sk := suite.app.GetSavingsKeeper()
|
||||||
savingsParams := sk.GetParams(suite.ctx)
|
// savingsParams := sk.GetParams(suite.ctx)
|
||||||
savingsParams.SupportedDenoms = append(savingsParams.SupportedDenoms, liquidtypes.DefaultDerivativeDenom)
|
// savingsParams.SupportedDenoms = append(savingsParams.SupportedDenoms, liquidtypes.DefaultDerivativeDenom)
|
||||||
sk.SetParams(suite.ctx, savingsParams)
|
// sk.SetParams(suite.ctx, savingsParams)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *tallyHandlerSuite) earnDeposit(owner sdk.AccAddress, derivative sdk.Coin) {
|
func (suite *tallyHandlerSuite) earnDeposit(owner sdk.AccAddress, derivative sdk.Coin) {
|
||||||
ek := suite.app.GetEarnKeeper()
|
// ek := suite.app.GetEarnKeeper()
|
||||||
|
|
||||||
err := ek.Deposit(suite.ctx, owner, derivative, earntypes.STRATEGY_TYPE_SAVINGS)
|
// err := ek.Deposit(suite.ctx, owner, derivative, earntypes.STRATEGY_TYPE_SAVINGS)
|
||||||
suite.Require().NoError(err)
|
// suite.Require().NoError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *tallyHandlerSuite) mintDerivative(owner sdk.AccAddress, validator sdk.ValAddress, amount sdkmath.Int) sdk.Coin {
|
func (suite *tallyHandlerSuite) mintDerivative(owner sdk.AccAddress, validator sdk.ValAddress, amount sdkmath.Int) sdk.Coin {
|
||||||
lk := suite.app.GetLiquidKeeper()
|
// lk := suite.app.GetLiquidKeeper()
|
||||||
|
|
||||||
minted, err := lk.MintDerivative(suite.ctx, owner, validator, suite.newBondCoin(amount))
|
// minted, err := lk.MintDerivative(suite.ctx, owner, validator, suite.newBondCoin(amount))
|
||||||
suite.Require().NoError(err)
|
// suite.Require().NoError(err)
|
||||||
|
|
||||||
return minted
|
// return minted
|
||||||
|
return sdk.NewCoin("ukava", amount)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *tallyHandlerSuite) delegateToNewBondedValidator(delegator sdk.AccAddress, amount sdkmath.Int) stakingtypes.ValidatorI {
|
func (suite *tallyHandlerSuite) delegateToNewBondedValidator(delegator sdk.AccAddress, amount sdkmath.Int) stakingtypes.ValidatorI {
|
||||||
|
@ -9,6 +9,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
sdkmath "cosmossdk.io/math"
|
sdkmath "cosmossdk.io/math"
|
||||||
|
"github.com/0glabs/0g-chain/chaincfg"
|
||||||
tmdb "github.com/cometbft/cometbft-db"
|
tmdb "github.com/cometbft/cometbft-db"
|
||||||
abci "github.com/cometbft/cometbft/abci/types"
|
abci "github.com/cometbft/cometbft/abci/types"
|
||||||
"github.com/cometbft/cometbft/libs/log"
|
"github.com/cometbft/cometbft/libs/log"
|
||||||
@ -41,22 +42,11 @@ import (
|
|||||||
feemarketkeeper "github.com/evmos/ethermint/x/feemarket/keeper"
|
feemarketkeeper "github.com/evmos/ethermint/x/feemarket/keeper"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
auctionkeeper "github.com/kava-labs/kava/x/auction/keeper"
|
bep3keeper "github.com/0glabs/0g-chain/x/bep3/keeper"
|
||||||
bep3keeper "github.com/kava-labs/kava/x/bep3/keeper"
|
committeekeeper "github.com/0glabs/0g-chain/x/committee/keeper"
|
||||||
cdpkeeper "github.com/kava-labs/kava/x/cdp/keeper"
|
evmutilkeeper "github.com/0glabs/0g-chain/x/evmutil/keeper"
|
||||||
committeekeeper "github.com/kava-labs/kava/x/committee/keeper"
|
issuancekeeper "github.com/0glabs/0g-chain/x/issuance/keeper"
|
||||||
communitykeeper "github.com/kava-labs/kava/x/community/keeper"
|
pricefeedkeeper "github.com/0glabs/0g-chain/x/pricefeed/keeper"
|
||||||
earnkeeper "github.com/kava-labs/kava/x/earn/keeper"
|
|
||||||
evmutilkeeper "github.com/kava-labs/kava/x/evmutil/keeper"
|
|
||||||
hardkeeper "github.com/kava-labs/kava/x/hard/keeper"
|
|
||||||
incentivekeeper "github.com/kava-labs/kava/x/incentive/keeper"
|
|
||||||
issuancekeeper "github.com/kava-labs/kava/x/issuance/keeper"
|
|
||||||
kavadistkeeper "github.com/kava-labs/kava/x/kavadist/keeper"
|
|
||||||
liquidkeeper "github.com/kava-labs/kava/x/liquid/keeper"
|
|
||||||
pricefeedkeeper "github.com/kava-labs/kava/x/pricefeed/keeper"
|
|
||||||
routerkeeper "github.com/kava-labs/kava/x/router/keeper"
|
|
||||||
savingskeeper "github.com/kava-labs/kava/x/savings/keeper"
|
|
||||||
swapkeeper "github.com/kava-labs/kava/x/swap/keeper"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -89,7 +79,7 @@ type TestApp struct {
|
|||||||
//
|
//
|
||||||
// Note, it also sets the sdk config with the app's address prefix, coin type, etc.
|
// Note, it also sets the sdk config with the app's address prefix, coin type, etc.
|
||||||
func NewTestApp() TestApp {
|
func NewTestApp() TestApp {
|
||||||
SetSDKConfig()
|
chaincfg.SetSDKConfig()
|
||||||
|
|
||||||
return NewTestAppFromSealed()
|
return NewTestAppFromSealed()
|
||||||
}
|
}
|
||||||
@ -101,7 +91,7 @@ func NewTestAppFromSealed() TestApp {
|
|||||||
encCfg := MakeEncodingConfig()
|
encCfg := MakeEncodingConfig()
|
||||||
|
|
||||||
app := NewApp(
|
app := NewApp(
|
||||||
log.NewNopLogger(), db, DefaultNodeHome, nil,
|
log.NewNopLogger(), db, chaincfg.DefaultNodeHome, nil,
|
||||||
encCfg, DefaultOptions, baseapp.SetChainID(TestChainId),
|
encCfg, DefaultOptions, baseapp.SetChainID(TestChainId),
|
||||||
)
|
)
|
||||||
return TestApp{App: *app}
|
return TestApp{App: *app}
|
||||||
@ -117,24 +107,13 @@ func (tApp TestApp) GetDistrKeeper() distkeeper.Keeper { return tApp.di
|
|||||||
func (tApp TestApp) GetGovKeeper() govkeeper.Keeper { return tApp.govKeeper }
|
func (tApp TestApp) GetGovKeeper() govkeeper.Keeper { return tApp.govKeeper }
|
||||||
func (tApp TestApp) GetCrisisKeeper() crisiskeeper.Keeper { return tApp.crisisKeeper }
|
func (tApp TestApp) GetCrisisKeeper() crisiskeeper.Keeper { return tApp.crisisKeeper }
|
||||||
func (tApp TestApp) GetParamsKeeper() paramskeeper.Keeper { return tApp.paramsKeeper }
|
func (tApp TestApp) GetParamsKeeper() paramskeeper.Keeper { return tApp.paramsKeeper }
|
||||||
func (tApp TestApp) GetKavadistKeeper() kavadistkeeper.Keeper { return tApp.kavadistKeeper }
|
|
||||||
func (tApp TestApp) GetAuctionKeeper() auctionkeeper.Keeper { return tApp.auctionKeeper }
|
|
||||||
func (tApp TestApp) GetIssuanceKeeper() issuancekeeper.Keeper { return tApp.issuanceKeeper }
|
func (tApp TestApp) GetIssuanceKeeper() issuancekeeper.Keeper { return tApp.issuanceKeeper }
|
||||||
func (tApp TestApp) GetBep3Keeper() bep3keeper.Keeper { return tApp.bep3Keeper }
|
func (tApp TestApp) GetBep3Keeper() bep3keeper.Keeper { return tApp.bep3Keeper }
|
||||||
func (tApp TestApp) GetPriceFeedKeeper() pricefeedkeeper.Keeper { return tApp.pricefeedKeeper }
|
func (tApp TestApp) GetPriceFeedKeeper() pricefeedkeeper.Keeper { return tApp.pricefeedKeeper }
|
||||||
func (tApp TestApp) GetSwapKeeper() swapkeeper.Keeper { return tApp.swapKeeper }
|
|
||||||
func (tApp TestApp) GetCDPKeeper() cdpkeeper.Keeper { return tApp.cdpKeeper }
|
|
||||||
func (tApp TestApp) GetHardKeeper() hardkeeper.Keeper { return tApp.hardKeeper }
|
|
||||||
func (tApp TestApp) GetCommitteeKeeper() committeekeeper.Keeper { return tApp.committeeKeeper }
|
func (tApp TestApp) GetCommitteeKeeper() committeekeeper.Keeper { return tApp.committeeKeeper }
|
||||||
func (tApp TestApp) GetIncentiveKeeper() incentivekeeper.Keeper { return tApp.incentiveKeeper }
|
|
||||||
func (tApp TestApp) GetEvmutilKeeper() evmutilkeeper.Keeper { return tApp.evmutilKeeper }
|
func (tApp TestApp) GetEvmutilKeeper() evmutilkeeper.Keeper { return tApp.evmutilKeeper }
|
||||||
func (tApp TestApp) GetEvmKeeper() *evmkeeper.Keeper { return tApp.evmKeeper }
|
func (tApp TestApp) GetEvmKeeper() *evmkeeper.Keeper { return tApp.evmKeeper }
|
||||||
func (tApp TestApp) GetSavingsKeeper() savingskeeper.Keeper { return tApp.savingsKeeper }
|
|
||||||
func (tApp TestApp) GetFeeMarketKeeper() feemarketkeeper.Keeper { return tApp.feeMarketKeeper }
|
func (tApp TestApp) GetFeeMarketKeeper() feemarketkeeper.Keeper { return tApp.feeMarketKeeper }
|
||||||
func (tApp TestApp) GetLiquidKeeper() liquidkeeper.Keeper { return tApp.liquidKeeper }
|
|
||||||
func (tApp TestApp) GetEarnKeeper() earnkeeper.Keeper { return tApp.earnKeeper }
|
|
||||||
func (tApp TestApp) GetRouterKeeper() routerkeeper.Keeper { return tApp.routerKeeper }
|
|
||||||
func (tApp TestApp) GetCommunityKeeper() communitykeeper.Keeper { return tApp.communityKeeper }
|
|
||||||
|
|
||||||
func (tApp TestApp) GetKVStoreKey(key string) *storetypes.KVStoreKey {
|
func (tApp TestApp) GetKVStoreKey(key string) *storetypes.KVStoreKey {
|
||||||
return tApp.keys[key]
|
return tApp.keys[key]
|
||||||
@ -174,7 +153,7 @@ func GenesisStateWithSingleValidator(
|
|||||||
balances := []banktypes.Balance{
|
balances := []banktypes.Balance{
|
||||||
{
|
{
|
||||||
Address: acc.GetAddress().String(),
|
Address: acc.GetAddress().String(),
|
||||||
Coins: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(100000000000000))),
|
Coins: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(100000000000000)),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,7 +216,7 @@ func genesisStateWithValSet(
|
|||||||
}
|
}
|
||||||
// set validators and delegations
|
// set validators and delegations
|
||||||
currentStakingGenesis := stakingtypes.GetGenesisStateFromAppState(app.appCodec, genesisState)
|
currentStakingGenesis := stakingtypes.GetGenesisStateFromAppState(app.appCodec, genesisState)
|
||||||
currentStakingGenesis.Params.BondDenom = "ukava"
|
currentStakingGenesis.Params.BondDenom = chaincfg.GasDenom // TODO:
|
||||||
|
|
||||||
stakingGenesis := stakingtypes.NewGenesisState(
|
stakingGenesis := stakingtypes.NewGenesisState(
|
||||||
currentStakingGenesis.Params,
|
currentStakingGenesis.Params,
|
||||||
@ -257,13 +236,13 @@ func genesisStateWithValSet(
|
|||||||
|
|
||||||
for range delegations {
|
for range delegations {
|
||||||
// add delegated tokens to total supply
|
// add delegated tokens to total supply
|
||||||
totalSupply = totalSupply.Add(sdk.NewCoin("ukava", bondAmt))
|
totalSupply = totalSupply.Add(chaincfg.MakeCoinForGasDenom(bondAmt))
|
||||||
}
|
}
|
||||||
|
|
||||||
// add bonded amount to bonded pool module account
|
// add bonded amount to bonded pool module account
|
||||||
balances = append(balances, banktypes.Balance{
|
balances = append(balances, banktypes.Balance{
|
||||||
Address: authtypes.NewModuleAddress(stakingtypes.BondedPoolName).String(),
|
Address: authtypes.NewModuleAddress(stakingtypes.BondedPoolName).String(),
|
||||||
Coins: sdk.Coins{sdk.NewCoin("ukava", bondAmt)},
|
Coins: sdk.Coins{chaincfg.MakeCoinForGasDenom(bondAmt)},
|
||||||
})
|
})
|
||||||
|
|
||||||
bankGenesis := banktypes.NewGenesisState(
|
bankGenesis := banktypes.NewGenesisState(
|
||||||
|
275
app/upgrades.go
275
app/upgrades.go
@ -3,44 +3,70 @@ package app
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
|
||||||
storetypes "github.com/cosmos/cosmos-sdk/store/types"
|
storetypes "github.com/cosmos/cosmos-sdk/store/types"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/cosmos/cosmos-sdk/types/module"
|
"github.com/cosmos/cosmos-sdk/types/module"
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
|
||||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
|
||||||
consensustypes "github.com/cosmos/cosmos-sdk/x/consensus/types"
|
|
||||||
crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types"
|
|
||||||
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
|
|
||||||
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
|
||||||
govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
|
|
||||||
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
|
||||||
paramstypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
|
||||||
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
|
|
||||||
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||||
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
|
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
|
||||||
packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types"
|
|
||||||
ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types"
|
|
||||||
ibctmmigrations "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint/migrations"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
UpgradeName_Mainnet = "v0.26.0"
|
UpgradeName_Mainnet = "v0.26.0"
|
||||||
UpgradeName_Testnet = "v0.26.0-alpha.0"
|
UpgradeName_Testnet = "v0.26.0-alpha.0"
|
||||||
|
UpgradeName_E2ETest = "v0.26.0-testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// KAVA to ukava - 6 decimals
|
||||||
|
kavaConversionFactor = sdk.NewInt(1000_000)
|
||||||
|
secondsPerYear = sdk.NewInt(365 * 24 * 60 * 60)
|
||||||
|
|
||||||
|
// 10 Million KAVA per year in staking rewards, inflation disable time 2024-01-01T00:00:00 UTC
|
||||||
|
// CommunityParams_Mainnet = communitytypes.NewParams(
|
||||||
|
// time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC),
|
||||||
|
// // before switchover
|
||||||
|
// sdkmath.LegacyZeroDec(),
|
||||||
|
// // after switchover - 10M KAVA to ukava per year / seconds per year
|
||||||
|
// sdkmath.LegacyNewDec(10_000_000).
|
||||||
|
// MulInt(kavaConversionFactor).
|
||||||
|
// QuoInt(secondsPerYear),
|
||||||
|
// )
|
||||||
|
|
||||||
|
// Testnet -- 15 Trillion KAVA per year in staking rewards, inflation disable time 2023-11-16T00:00:00 UTC
|
||||||
|
// CommunityParams_Testnet = communitytypes.NewParams(
|
||||||
|
// time.Date(2023, 11, 16, 0, 0, 0, 0, time.UTC),
|
||||||
|
// // before switchover
|
||||||
|
// sdkmath.LegacyZeroDec(),
|
||||||
|
// // after switchover
|
||||||
|
// sdkmath.LegacyNewDec(15_000_000).
|
||||||
|
// MulInt64(1_000_000). // 15M * 1M = 15T
|
||||||
|
// MulInt(kavaConversionFactor).
|
||||||
|
// QuoInt(secondsPerYear),
|
||||||
|
// )
|
||||||
|
|
||||||
|
// CommunityParams_E2E = communitytypes.NewParams(
|
||||||
|
// time.Now().Add(10*time.Second).UTC(), // relative time for testing
|
||||||
|
// sdkmath.LegacyNewDec(0), // stakingRewardsPerSecond
|
||||||
|
// sdkmath.LegacyNewDec(1000), // upgradeTimeSetstakingRewardsPerSecond
|
||||||
|
// )
|
||||||
|
|
||||||
CDPLiquidationBlockInterval = int64(50)
|
CDPLiquidationBlockInterval = int64(50)
|
||||||
)
|
)
|
||||||
|
|
||||||
// RegisterUpgradeHandlers registers the upgrade handlers for the app.
|
// RegisterUpgradeHandlers registers the upgrade handlers for the app.
|
||||||
func (app App) RegisterUpgradeHandlers() {
|
func (app App) RegisterUpgradeHandlers() {
|
||||||
app.upgradeKeeper.SetUpgradeHandler(
|
// app.upgradeKeeper.SetUpgradeHandler(
|
||||||
UpgradeName_Mainnet,
|
// UpgradeName_Mainnet,
|
||||||
upgradeHandler(app, UpgradeName_Mainnet),
|
// upgradeHandler(app, UpgradeName_Mainnet, CommunityParams_Mainnet),
|
||||||
)
|
// )
|
||||||
app.upgradeKeeper.SetUpgradeHandler(
|
// app.upgradeKeeper.SetUpgradeHandler(
|
||||||
UpgradeName_Testnet,
|
// UpgradeName_Testnet,
|
||||||
upgradeHandler(app, UpgradeName_Testnet),
|
// upgradeHandler(app, UpgradeName_Testnet, CommunityParams_Testnet),
|
||||||
)
|
// )
|
||||||
|
// app.upgradeKeeper.SetUpgradeHandler(
|
||||||
|
// UpgradeName_E2ETest,
|
||||||
|
// upgradeHandler(app, UpgradeName_Testnet, CommunityParams_E2E),
|
||||||
|
// )
|
||||||
|
|
||||||
upgradeInfo, err := app.upgradeKeeper.ReadUpgradeInfoFromDisk()
|
upgradeInfo, err := app.upgradeKeeper.ReadUpgradeInfoFromDisk()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -48,14 +74,14 @@ func (app App) RegisterUpgradeHandlers() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
doUpgrade := upgradeInfo.Name == UpgradeName_Mainnet ||
|
doUpgrade := upgradeInfo.Name == UpgradeName_Mainnet ||
|
||||||
upgradeInfo.Name == UpgradeName_Testnet
|
upgradeInfo.Name == UpgradeName_Testnet ||
|
||||||
|
upgradeInfo.Name == UpgradeName_E2ETest
|
||||||
|
|
||||||
if doUpgrade && !app.upgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
|
if doUpgrade && !app.upgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
|
||||||
storeUpgrades := storetypes.StoreUpgrades{
|
storeUpgrades := storetypes.StoreUpgrades{
|
||||||
Added: []string{
|
Added: []string{
|
||||||
crisistypes.ModuleName,
|
// x/community added store
|
||||||
consensustypes.ModuleName,
|
// communitytypes.ModuleName,
|
||||||
packetforwardtypes.ModuleName,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,65 +102,154 @@ func upgradeHandler(
|
|||||||
) (module.VersionMap, error) {
|
) (module.VersionMap, error) {
|
||||||
app.Logger().Info(fmt.Sprintf("running %s upgrade handler", name))
|
app.Logger().Info(fmt.Sprintf("running %s upgrade handler", name))
|
||||||
|
|
||||||
baseAppLegacySS := app.paramsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable())
|
toVM, err := app.mm.RunMigrations(ctx, app.configurator, fromVM)
|
||||||
|
if err != nil {
|
||||||
// Set param key table for params module migration
|
return toVM, err
|
||||||
for _, subspace := range app.paramsKeeper.GetSubspaces() {
|
|
||||||
subspace := subspace
|
|
||||||
var keyTable paramstypes.KeyTable
|
|
||||||
switch subspace.Name() {
|
|
||||||
// sdk
|
|
||||||
case authtypes.ModuleName:
|
|
||||||
keyTable = authtypes.ParamKeyTable() //nolint:staticcheck
|
|
||||||
case banktypes.ModuleName:
|
|
||||||
keyTable = banktypes.ParamKeyTable() //nolint:staticcheck,nolintlint
|
|
||||||
case stakingtypes.ModuleName:
|
|
||||||
keyTable = stakingtypes.ParamKeyTable()
|
|
||||||
case minttypes.ModuleName:
|
|
||||||
keyTable = minttypes.ParamKeyTable() //nolint:staticcheck
|
|
||||||
case distrtypes.ModuleName:
|
|
||||||
keyTable = distrtypes.ParamKeyTable() //nolint:staticcheck,nolintlint
|
|
||||||
case slashingtypes.ModuleName:
|
|
||||||
keyTable = slashingtypes.ParamKeyTable() //nolint:staticcheck
|
|
||||||
case govtypes.ModuleName:
|
|
||||||
keyTable = govv1.ParamKeyTable() //nolint:staticcheck
|
|
||||||
case crisistypes.ModuleName:
|
|
||||||
keyTable = crisistypes.ParamKeyTable() //nolint:staticcheck
|
|
||||||
|
|
||||||
// ibc
|
|
||||||
case ibctransfertypes.ModuleName:
|
|
||||||
keyTable = ibctransfertypes.ParamKeyTable() //nolint:staticcheck
|
|
||||||
|
|
||||||
default:
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if !subspace.HasKeyTable() {
|
|
||||||
// NOTE: This modifies the internal map used to store the key table entries
|
|
||||||
// which is a pointer.
|
|
||||||
subspace.WithKeyTable(keyTable)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional migration: prune expired tendermint consensus states to save storage space
|
//
|
||||||
// see https://github.com/cosmos/ibc-go/blob/v7.2.0/docs/migrations/v6-to-v7.md#chains
|
// Staking validator minimum commission
|
||||||
if _, err := ibctmmigrations.PruneExpiredConsensusStates(ctx, app.appCodec, app.ibcKeeper.ClientKeeper); err != nil {
|
//
|
||||||
return nil, err
|
UpdateValidatorMinimumCommission(ctx, app)
|
||||||
}
|
|
||||||
|
|
||||||
// migrate tendermint consensus parameters from x/params module to a
|
//
|
||||||
// dedicated x/consensus module.
|
// Community Params
|
||||||
baseapp.MigrateParams(ctx, baseAppLegacySS, &app.consensusParamsKeeper)
|
//
|
||||||
|
// app.communityKeeper.SetParams(ctx, communityParams)
|
||||||
|
// app.Logger().Info(
|
||||||
|
// "initialized x/community params",
|
||||||
|
// "UpgradeTimeDisableInflation", communityParams.UpgradeTimeDisableInflation,
|
||||||
|
// "StakingRewardsPerSecond", communityParams.StakingRewardsPerSecond,
|
||||||
|
// "UpgradeTimeSetStakingRewardsPerSecond", communityParams.UpgradeTimeSetStakingRewardsPerSecond,
|
||||||
|
// )
|
||||||
|
|
||||||
// run migrations for all modules and return new consensus version map
|
//
|
||||||
versionMap, err := app.mm.RunMigrations(ctx, app.configurator, fromVM)
|
// Kavadist gov grant
|
||||||
|
//
|
||||||
|
// msgGrant, err := authz.NewMsgGrant(
|
||||||
|
// app.accountKeeper.GetModuleAddress(kavadisttypes.ModuleName), // granter
|
||||||
|
// app.accountKeeper.GetModuleAddress(govtypes.ModuleName), // grantee
|
||||||
|
// authz.NewGenericAuthorization(sdk.MsgTypeURL(&banktypes.MsgSend{})), // authorization
|
||||||
|
// nil, // expiration
|
||||||
|
// )
|
||||||
|
// if err != nil {
|
||||||
|
// return toVM, err
|
||||||
|
// }
|
||||||
|
// _, err = app.authzKeeper.Grant(ctx, msgGrant)
|
||||||
|
// if err != nil {
|
||||||
|
// return toVM, err
|
||||||
|
// }
|
||||||
|
// app.Logger().Info("created gov grant for kavadist funds")
|
||||||
|
|
||||||
// Set risky CDP's to sync interest and liquidate every 100 blocks instead
|
//
|
||||||
// of every block. This significantly improves performance as this cdp
|
// Gov Quorum
|
||||||
// process is a signification porition of time spent during block execution.
|
//
|
||||||
cdpParams := app.cdpKeeper.GetParams(ctx)
|
govTallyParams := app.govKeeper.GetTallyParams(ctx)
|
||||||
cdpParams.LiquidationBlockInterval = CDPLiquidationBlockInterval
|
oldQuorum := govTallyParams.Quorum
|
||||||
app.cdpKeeper.SetParams(ctx, cdpParams)
|
govTallyParams.Quorum = sdkmath.LegacyMustNewDecFromStr("0.2").String()
|
||||||
|
app.govKeeper.SetTallyParams(ctx, govTallyParams)
|
||||||
|
app.Logger().Info(fmt.Sprintf("updated tally quorum from %s to %s", oldQuorum, govTallyParams.Quorum))
|
||||||
|
|
||||||
return versionMap, err
|
//
|
||||||
|
// Incentive Params
|
||||||
|
//
|
||||||
|
UpdateIncentiveParams(ctx, app)
|
||||||
|
|
||||||
|
return toVM, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateValidatorMinimumCommission updates the commission rate for all
|
||||||
|
// validators to be at least the new min commission rate, and sets the minimum
|
||||||
|
// commission rate in the staking params.
|
||||||
|
func UpdateValidatorMinimumCommission(
|
||||||
|
ctx sdk.Context,
|
||||||
|
app App,
|
||||||
|
) {
|
||||||
|
resultCount := make(map[stakingtypes.BondStatus]int)
|
||||||
|
|
||||||
|
// Iterate over *all* validators including inactive
|
||||||
|
app.stakingKeeper.IterateValidators(
|
||||||
|
ctx,
|
||||||
|
func(index int64, validator stakingtypes.ValidatorI) (stop bool) {
|
||||||
|
// Skip if validator commission is already >= 5%
|
||||||
|
if validator.GetCommission().GTE(ValidatorMinimumCommission) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
val, ok := validator.(stakingtypes.Validator)
|
||||||
|
if !ok {
|
||||||
|
panic("expected stakingtypes.Validator")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set minimum commission rate to 5%, when commission is < 5%
|
||||||
|
val.Commission.Rate = ValidatorMinimumCommission
|
||||||
|
val.Commission.UpdateTime = ctx.BlockTime()
|
||||||
|
|
||||||
|
// Update MaxRate if necessary
|
||||||
|
if val.Commission.MaxRate.LT(ValidatorMinimumCommission) {
|
||||||
|
val.Commission.MaxRate = ValidatorMinimumCommission
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := app.stakingKeeper.BeforeValidatorModified(ctx, val.GetOperator()); err != nil {
|
||||||
|
panic(fmt.Sprintf("failed to call BeforeValidatorModified: %s", err))
|
||||||
|
}
|
||||||
|
app.stakingKeeper.SetValidator(ctx, val)
|
||||||
|
|
||||||
|
// Keep track of counts just for logging purposes
|
||||||
|
switch val.GetStatus() {
|
||||||
|
case stakingtypes.Bonded:
|
||||||
|
resultCount[stakingtypes.Bonded]++
|
||||||
|
case stakingtypes.Unbonded:
|
||||||
|
resultCount[stakingtypes.Unbonded]++
|
||||||
|
case stakingtypes.Unbonding:
|
||||||
|
resultCount[stakingtypes.Unbonding]++
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
app.Logger().Info(
|
||||||
|
"updated validator minimum commission rate for all existing validators",
|
||||||
|
stakingtypes.BondStatusBonded, resultCount[stakingtypes.Bonded],
|
||||||
|
stakingtypes.BondStatusUnbonded, resultCount[stakingtypes.Unbonded],
|
||||||
|
stakingtypes.BondStatusUnbonding, resultCount[stakingtypes.Unbonding],
|
||||||
|
)
|
||||||
|
|
||||||
|
stakingParams := app.stakingKeeper.GetParams(ctx)
|
||||||
|
stakingParams.MinCommissionRate = ValidatorMinimumCommission
|
||||||
|
app.stakingKeeper.SetParams(ctx, stakingParams)
|
||||||
|
|
||||||
|
app.Logger().Info(
|
||||||
|
"updated x/staking params minimum commission rate",
|
||||||
|
"MinCommissionRate", stakingParams.MinCommissionRate,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateIncentiveParams modifies the earn rewards period for bkava to be 600K KAVA per year.
|
||||||
|
func UpdateIncentiveParams(
|
||||||
|
ctx sdk.Context,
|
||||||
|
app App,
|
||||||
|
) {
|
||||||
|
// incentiveParams := app.incentiveKeeper.GetParams(ctx)
|
||||||
|
|
||||||
|
// bkava annualized rewards: 600K KAVA
|
||||||
|
// newAmount := sdkmath.LegacyNewDec(600_000).
|
||||||
|
// MulInt(kavaConversionFactor).
|
||||||
|
// QuoInt(secondsPerYear).
|
||||||
|
// TruncateInt()
|
||||||
|
|
||||||
|
// for i := range incentiveParams.EarnRewardPeriods {
|
||||||
|
// if incentiveParams.EarnRewardPeriods[i].CollateralType != "bkava" {
|
||||||
|
// continue
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Update rewards per second via index
|
||||||
|
// incentiveParams.EarnRewardPeriods[i].RewardsPerSecond = sdk.NewCoins(
|
||||||
|
// sdk.NewCoin("ukava", newAmount),
|
||||||
|
// )
|
||||||
|
// }
|
||||||
|
|
||||||
|
// app.incentiveKeeper.SetParams(ctx, incentiveParams)
|
||||||
|
}
|
||||||
|
239
app/upgrades_test.go
Normal file
239
app/upgrades_test.go
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
package app_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/0glabs/0g-chain/app"
|
||||||
|
tmproto "github.com/cometbft/cometbft/proto/tendermint/types"
|
||||||
|
tmtime "github.com/cometbft/cometbft/types/time"
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||||
|
"github.com/evmos/ethermint/crypto/ethsecp256k1"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
// func TestUpgradeCommunityParams_Mainnet(t *testing.T) {
|
||||||
|
// require.Equal(
|
||||||
|
// t,
|
||||||
|
// sdkmath.LegacyZeroDec().String(),
|
||||||
|
// app.CommunityParams_Mainnet.StakingRewardsPerSecond.String(),
|
||||||
|
// )
|
||||||
|
|
||||||
|
// require.Equal(
|
||||||
|
// t,
|
||||||
|
// // Manually confirmed
|
||||||
|
// "317097.919837645865043125",
|
||||||
|
// app.CommunityParams_Mainnet.UpgradeTimeSetStakingRewardsPerSecond.String(),
|
||||||
|
// "mainnet kava per second should be correct",
|
||||||
|
// )
|
||||||
|
// }
|
||||||
|
|
||||||
|
// func TestUpgradeCommunityParams_Testnet(t *testing.T) {
|
||||||
|
// require.Equal(
|
||||||
|
// t,
|
||||||
|
// sdkmath.LegacyZeroDec().String(),
|
||||||
|
// app.CommunityParams_Testnet.StakingRewardsPerSecond.String(),
|
||||||
|
// )
|
||||||
|
|
||||||
|
// require.Equal(
|
||||||
|
// t,
|
||||||
|
// // Manually confirmed
|
||||||
|
// "475646879756.468797564687975646",
|
||||||
|
// app.CommunityParams_Testnet.UpgradeTimeSetStakingRewardsPerSecond.String(),
|
||||||
|
// "testnet kava per second should be correct",
|
||||||
|
// )
|
||||||
|
// }
|
||||||
|
|
||||||
|
func TestUpdateValidatorMinimumCommission(t *testing.T) {
|
||||||
|
tApp := app.NewTestApp()
|
||||||
|
tApp.InitializeFromGenesisStates()
|
||||||
|
ctx := tApp.NewContext(true, tmproto.Header{Height: 1, Time: tmtime.Now()})
|
||||||
|
|
||||||
|
sk := tApp.GetStakingKeeper()
|
||||||
|
stakingParams := sk.GetParams(ctx)
|
||||||
|
stakingParams.MinCommissionRate = sdk.ZeroDec()
|
||||||
|
sk.SetParams(ctx, stakingParams)
|
||||||
|
|
||||||
|
// Set some validators with varying commission rates
|
||||||
|
|
||||||
|
vals := []struct {
|
||||||
|
name string
|
||||||
|
operatorAddr sdk.ValAddress
|
||||||
|
consPriv *ethsecp256k1.PrivKey
|
||||||
|
commissionRateMin sdk.Dec
|
||||||
|
commissionRateMax sdk.Dec
|
||||||
|
shouldBeUpdated bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "zero commission rate",
|
||||||
|
operatorAddr: sdk.ValAddress("val0"),
|
||||||
|
consPriv: generateConsKey(t),
|
||||||
|
commissionRateMin: sdk.ZeroDec(),
|
||||||
|
commissionRateMax: sdk.ZeroDec(),
|
||||||
|
shouldBeUpdated: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "0.01 commission rate",
|
||||||
|
operatorAddr: sdk.ValAddress("val1"),
|
||||||
|
consPriv: generateConsKey(t),
|
||||||
|
commissionRateMin: sdk.MustNewDecFromStr("0.01"),
|
||||||
|
commissionRateMax: sdk.MustNewDecFromStr("0.01"),
|
||||||
|
shouldBeUpdated: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "0.05 commission rate",
|
||||||
|
operatorAddr: sdk.ValAddress("val2"),
|
||||||
|
consPriv: generateConsKey(t),
|
||||||
|
commissionRateMin: sdk.MustNewDecFromStr("0.05"),
|
||||||
|
commissionRateMax: sdk.MustNewDecFromStr("0.05"),
|
||||||
|
shouldBeUpdated: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "0.06 commission rate",
|
||||||
|
operatorAddr: sdk.ValAddress("val3"),
|
||||||
|
consPriv: generateConsKey(t),
|
||||||
|
commissionRateMin: sdk.MustNewDecFromStr("0.06"),
|
||||||
|
commissionRateMax: sdk.MustNewDecFromStr("0.06"),
|
||||||
|
shouldBeUpdated: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "0.5 commission rate",
|
||||||
|
operatorAddr: sdk.ValAddress("val4"),
|
||||||
|
consPriv: generateConsKey(t),
|
||||||
|
commissionRateMin: sdk.MustNewDecFromStr("0.5"),
|
||||||
|
commissionRateMax: sdk.MustNewDecFromStr("0.5"),
|
||||||
|
shouldBeUpdated: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range vals {
|
||||||
|
val, err := stakingtypes.NewValidator(
|
||||||
|
v.operatorAddr,
|
||||||
|
v.consPriv.PubKey(),
|
||||||
|
stakingtypes.Description{},
|
||||||
|
)
|
||||||
|
require.NoError(t, err)
|
||||||
|
val.Commission.Rate = v.commissionRateMin
|
||||||
|
val.Commission.MaxRate = v.commissionRateMax
|
||||||
|
|
||||||
|
err = sk.SetValidatorByConsAddr(ctx, val)
|
||||||
|
require.NoError(t, err)
|
||||||
|
sk.SetValidator(ctx, val)
|
||||||
|
}
|
||||||
|
|
||||||
|
require.NotPanics(
|
||||||
|
t, func() {
|
||||||
|
app.UpdateValidatorMinimumCommission(ctx, tApp.App)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
stakingParamsAfter := sk.GetParams(ctx)
|
||||||
|
require.Equal(t, stakingParamsAfter.MinCommissionRate, app.ValidatorMinimumCommission)
|
||||||
|
|
||||||
|
// Check that all validators have a commission rate >= 5%
|
||||||
|
for _, val := range vals {
|
||||||
|
t.Run(val.name, func(t *testing.T) {
|
||||||
|
validator, found := sk.GetValidator(ctx, val.operatorAddr)
|
||||||
|
require.True(t, found, "validator should be found")
|
||||||
|
|
||||||
|
require.True(
|
||||||
|
t,
|
||||||
|
validator.GetCommission().GTE(app.ValidatorMinimumCommission),
|
||||||
|
"commission rate should be >= 5%",
|
||||||
|
)
|
||||||
|
|
||||||
|
require.True(
|
||||||
|
t,
|
||||||
|
validator.Commission.MaxRate.GTE(app.ValidatorMinimumCommission),
|
||||||
|
"commission rate max should be >= 5%, got %s",
|
||||||
|
validator.Commission.MaxRate,
|
||||||
|
)
|
||||||
|
|
||||||
|
if val.shouldBeUpdated {
|
||||||
|
require.Equal(
|
||||||
|
t,
|
||||||
|
ctx.BlockTime(),
|
||||||
|
validator.Commission.UpdateTime,
|
||||||
|
"commission update time should be set to block time",
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
require.Equal(
|
||||||
|
t,
|
||||||
|
time.Unix(0, 0).UTC(),
|
||||||
|
validator.Commission.UpdateTime,
|
||||||
|
"commission update time should not be changed -- default value is 0",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// func TestUpdateIncentiveParams(t *testing.T) {
|
||||||
|
// tApp := app.NewTestApp()
|
||||||
|
// tApp.InitializeFromGenesisStates()
|
||||||
|
// ctx := tApp.NewContext(true, tmproto.Header{Height: 1, Time: tmtime.Now()})
|
||||||
|
|
||||||
|
// ik := tApp.GetIncentiveKeeper()
|
||||||
|
// params := ik.GetParams(ctx)
|
||||||
|
|
||||||
|
// startPeriod := time.Date(2021, 10, 26, 15, 0, 0, 0, time.UTC)
|
||||||
|
// endPeriod := time.Date(2022, 10, 26, 15, 0, 0, 0, time.UTC)
|
||||||
|
|
||||||
|
// params.EarnRewardPeriods = incentivetypes.MultiRewardPeriods{
|
||||||
|
// incentivetypes.NewMultiRewardPeriod(
|
||||||
|
// true,
|
||||||
|
// "bkava",
|
||||||
|
// startPeriod,
|
||||||
|
// endPeriod,
|
||||||
|
// sdk.NewCoins(
|
||||||
|
// sdk.NewCoin("ukava", sdk.NewInt(159459)),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// }
|
||||||
|
// ik.SetParams(ctx, params)
|
||||||
|
|
||||||
|
// beforeParams := ik.GetParams(ctx)
|
||||||
|
// require.Equal(t, params, beforeParams, "initial incentive params should be set")
|
||||||
|
|
||||||
|
// // -- UPGRADE
|
||||||
|
// app.UpdateIncentiveParams(ctx, tApp.App)
|
||||||
|
|
||||||
|
// // -- After
|
||||||
|
// afterParams := ik.GetParams(ctx)
|
||||||
|
|
||||||
|
// require.Len(
|
||||||
|
// t,
|
||||||
|
// afterParams.EarnRewardPeriods[0].RewardsPerSecond,
|
||||||
|
// 1,
|
||||||
|
// "bkava earn reward period should only contain 1 coin",
|
||||||
|
// )
|
||||||
|
// require.Equal(
|
||||||
|
// t,
|
||||||
|
// // Manual calculation of
|
||||||
|
// // 600,000 * 1000,000 / (365 * 24 * 60 * 60)
|
||||||
|
// sdk.NewCoin("ukava", sdkmath.NewInt(19025)),
|
||||||
|
// afterParams.EarnRewardPeriods[0].RewardsPerSecond[0],
|
||||||
|
// "bkava earn reward period should be updated",
|
||||||
|
// )
|
||||||
|
|
||||||
|
// // Check that other params are not changed
|
||||||
|
// afterParams.EarnRewardPeriods[0].RewardsPerSecond[0] = beforeParams.EarnRewardPeriods[0].RewardsPerSecond[0]
|
||||||
|
// require.Equal(
|
||||||
|
// t,
|
||||||
|
// beforeParams,
|
||||||
|
// afterParams,
|
||||||
|
// "other param values should not be changed",
|
||||||
|
// )
|
||||||
|
// }
|
||||||
|
|
||||||
|
func generateConsKey(
|
||||||
|
t *testing.T,
|
||||||
|
) *ethsecp256k1.PrivKey {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
|
key, err := ethsecp256k1.GenerateKey()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
return key
|
||||||
|
}
|
@ -7,7 +7,7 @@ proto-lint check-proto-lint: install-build-deps
|
|||||||
proto-gen: install-build-deps
|
proto-gen: install-build-deps
|
||||||
@echo "Generating go proto files"
|
@echo "Generating go proto files"
|
||||||
@$(BUF) generate --template proto/buf.gen.gogo.yaml proto
|
@$(BUF) generate --template proto/buf.gen.gogo.yaml proto
|
||||||
@cp -r out/github.com/kava-labs/kava/* ./
|
@cp -r out/github.com/0glabs/0g-chain/* ./
|
||||||
@rm -rf out/github.com
|
@rm -rf out/github.com
|
||||||
|
|
||||||
.PHONY: check-proto-gen
|
.PHONY: check-proto-gen
|
||||||
|
22
chaincfg/coin.go
Normal file
22
chaincfg/coin.go
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
package chaincfg
|
||||||
|
|
||||||
|
import (
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// Bip44CoinType satisfies EIP84. See https://github.com/ethereum/EIPs/issues/84 for more info.
|
||||||
|
Bip44CoinType uint32 = 459 // TODO: need new coin type for 0g-chain (a0gi)
|
||||||
|
// eth = 60
|
||||||
|
// kava = 459 // see https://github.com/satoshilabs/slips/blob/master/slip-0044.md
|
||||||
|
// BIP44HDPath is the default BIP44 HD path used on Ethereum.
|
||||||
|
//BIP44HDPath = ethaccounts.DefaultBaseDerivationPath.String()
|
||||||
|
)
|
||||||
|
|
||||||
|
// TODO: Implement BIP44CoinType and BIP44HDPath
|
||||||
|
// SetBip44CoinType sets the global coin type to be used in hierarchical deterministic wallets.
|
||||||
|
func setBip44CoinType(config *sdk.Config) {
|
||||||
|
config.SetCoinType(Bip44CoinType)
|
||||||
|
//config.SetPurpose(sdk.Purpose) // Shared
|
||||||
|
//config.SetFullFundraiserPath(BIP44HDPath) //nolint: staticcheck
|
||||||
|
}
|
57
chaincfg/coin_helper.go
Normal file
57
chaincfg/coin_helper.go
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package chaincfg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"math/big"
|
||||||
|
|
||||||
|
"cosmossdk.io/math"
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
"github.com/shopspring/decimal"
|
||||||
|
)
|
||||||
|
|
||||||
|
func toBigInt(amount any) *big.Int {
|
||||||
|
if amount == nil {
|
||||||
|
return big.NewInt(0)
|
||||||
|
}
|
||||||
|
var val *big.Int
|
||||||
|
switch amount.(type) {
|
||||||
|
case int:
|
||||||
|
val = big.NewInt(int64(amount.(int)))
|
||||||
|
case int32:
|
||||||
|
val = big.NewInt(int64(amount.(int32)))
|
||||||
|
case int64:
|
||||||
|
val = big.NewInt(amount.(int64))
|
||||||
|
case string:
|
||||||
|
var ok bool
|
||||||
|
val, ok = new(big.Int).SetString(amount.(string), 0)
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Sprintf("invalid amount string: %s", amount.(string)))
|
||||||
|
}
|
||||||
|
case math.Int:
|
||||||
|
val = amount.(math.Int).BigInt()
|
||||||
|
case *big.Int:
|
||||||
|
val = amount.(*big.Int)
|
||||||
|
case float64:
|
||||||
|
val = decimal.NewFromFloat(amount.(float64)).BigInt()
|
||||||
|
default:
|
||||||
|
panic(fmt.Sprintf("invalid amount type: %T", amount))
|
||||||
|
}
|
||||||
|
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
|
||||||
|
func MakeCoinForStandardDenom(amount any) sdk.Coin {
|
||||||
|
return makeCoin(StandardDenom, toBigInt(amount))
|
||||||
|
}
|
||||||
|
|
||||||
|
func MakeCoinForGasDenom(amount any) sdk.Coin {
|
||||||
|
return makeCoin(GasDenom, toBigInt(amount))
|
||||||
|
}
|
||||||
|
|
||||||
|
func MakeCoinForEvmDenom(amount any) sdk.Coin {
|
||||||
|
return makeCoin(EvmDenom, toBigInt(amount))
|
||||||
|
}
|
||||||
|
|
||||||
|
func makeCoin(denom string, amount *big.Int) sdk.Coin {
|
||||||
|
return sdk.NewCoin(denom, math.NewIntFromBigInt(amount))
|
||||||
|
}
|
15
chaincfg/config.go
Normal file
15
chaincfg/config.go
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package chaincfg
|
||||||
|
|
||||||
|
import sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
|
||||||
|
const (
|
||||||
|
AppName = "0gchaind"
|
||||||
|
EnvPrefix = "0GCHAIN"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SetSDKConfig() *sdk.Config {
|
||||||
|
config := sdk.GetConfig()
|
||||||
|
setBech32Prefixes(config)
|
||||||
|
setBip44CoinType(config)
|
||||||
|
return config
|
||||||
|
}
|
37
chaincfg/denoms.go
Normal file
37
chaincfg/denoms.go
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package chaincfg
|
||||||
|
|
||||||
|
import (
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
StandardDenom = "a0gi"
|
||||||
|
|
||||||
|
GasDenom = "ua0gi"
|
||||||
|
|
||||||
|
EvmDenom = "neuron"
|
||||||
|
|
||||||
|
BondDenom = EvmDenom
|
||||||
|
|
||||||
|
GasDenomUnit = 6
|
||||||
|
|
||||||
|
EvmDenomUnit = 18
|
||||||
|
|
||||||
|
GasDenomConversionMultiplier = 1e12
|
||||||
|
EvmDenomConversionMultiplier = 1e18
|
||||||
|
)
|
||||||
|
|
||||||
|
// RegisterDenoms registers the base and gas denominations to the SDK.
|
||||||
|
func RegisterDenoms() {
|
||||||
|
if err := sdk.RegisterDenom(StandardDenom, sdk.OneDec()); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := sdk.RegisterDenom(GasDenom, sdk.NewDecWithPrec(1, GasDenomUnit)); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := sdk.RegisterDenom(EvmDenom, sdk.NewDecWithPrec(1, EvmDenomUnit)); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
80
chaincfg/denoms_test.go
Normal file
80
chaincfg/denoms_test.go
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
package chaincfg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestRegisterDenoms(t *testing.T) {
|
||||||
|
RegisterDenoms()
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
from sdk.Coin
|
||||||
|
targetDenom string
|
||||||
|
expCoin sdk.Coin
|
||||||
|
expErr error
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"standard to gas",
|
||||||
|
MakeCoinForStandardDenom(99),
|
||||||
|
GasDenom,
|
||||||
|
MakeCoinForGasDenom(99 * (EvmDenomConversionMultiplier / GasDenomConversionMultiplier)),
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"gas to standard",
|
||||||
|
MakeCoinForGasDenom(5e7),
|
||||||
|
StandardDenom,
|
||||||
|
MakeCoinForStandardDenom(50),
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"standard to base",
|
||||||
|
MakeCoinForStandardDenom(22),
|
||||||
|
EvmDenom,
|
||||||
|
MakeCoinForEvmDenom(22 * EvmDenomConversionMultiplier),
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"base to standard",
|
||||||
|
MakeCoinForEvmDenom("97000000000000000000"),
|
||||||
|
StandardDenom,
|
||||||
|
MakeCoinForStandardDenom(97),
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"gas to base",
|
||||||
|
MakeCoinForGasDenom(33),
|
||||||
|
EvmDenom,
|
||||||
|
MakeCoinForEvmDenom(33 * GasDenomConversionMultiplier),
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"base to gas",
|
||||||
|
MakeCoinForEvmDenom("770000000000000"),
|
||||||
|
GasDenom,
|
||||||
|
MakeCoinForGasDenom(770000000000000 / GasDenomConversionMultiplier),
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
ret, err := sdk.ConvertCoin(tt.from, tt.targetDenom)
|
||||||
|
if tt.expErr != nil {
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("expErr is not nil, but got nil")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("expErr is nil, but got %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t, tt.expCoin, ret)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
25
chaincfg/homedir.go
Normal file
25
chaincfg/homedir.go
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package chaincfg
|
||||||
|
|
||||||
|
import (
|
||||||
|
stdlog "log"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
HomeDirName = ".0gchain"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// DefaultNodeHome default home directories for the application daemon
|
||||||
|
DefaultNodeHome string
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
userHomeDir, err := os.UserHomeDir()
|
||||||
|
if err != nil {
|
||||||
|
stdlog.Printf("Failed to get home dir %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
DefaultNodeHome = filepath.Join(userHomeDir, HomeDirName)
|
||||||
|
}
|
76
chaincfg/mint.go
Normal file
76
chaincfg/mint.go
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
package chaincfg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/shopspring/decimal"
|
||||||
|
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
Xmax, _ = sdk.NewDecFromStr("1.0") // upper limit on staked supply (as % of circ supply)
|
||||||
|
Ymin, _ = sdk.NewDecFromStr("0.05") // target APY at upper limit
|
||||||
|
|
||||||
|
Xmin, _ = sdk.NewDecFromStr("0.2") // lower limit on staked supply (as % of circ supply)
|
||||||
|
Ymax, _ = sdk.NewDecFromStr("0.15") // target APY at lower limit
|
||||||
|
|
||||||
|
decayRate, _ = sdk.NewDecFromStr("10")
|
||||||
|
)
|
||||||
|
|
||||||
|
func decExp(x sdk.Dec) sdk.Dec {
|
||||||
|
xDec := decimal.NewFromBigInt(x.BigInt(), -18)
|
||||||
|
expDec, _ := xDec.ExpTaylor(18)
|
||||||
|
expInt := expDec.Shift(18).BigInt()
|
||||||
|
return sdk.NewDecFromBigIntWithPrec(expInt, 18)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NextInflationRate(ctx sdk.Context, minter minttypes.Minter, params minttypes.Params, bondedRatio sdk.Dec, circulatingRatio sdk.Dec) sdk.Dec {
|
||||||
|
X := bondedRatio.Quo(circulatingRatio)
|
||||||
|
|
||||||
|
var apy sdk.Dec
|
||||||
|
if X.LT(Xmin) {
|
||||||
|
apy = Ymax
|
||||||
|
} else {
|
||||||
|
exp := decayRate.Neg().Mul(Xmax.Sub(Xmin))
|
||||||
|
c := decExp(exp)
|
||||||
|
d := Ymin.Sub(Ymax.Mul(c)).Quo(sdk.OneDec().Sub(c))
|
||||||
|
expBonded := decayRate.Neg().Mul(X.Sub(Xmin))
|
||||||
|
cBonded := decExp(expBonded)
|
||||||
|
e := Ymax.Sub(d).Mul(cBonded)
|
||||||
|
apy = d.Add(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
inflation := apy.Mul(bondedRatio)
|
||||||
|
|
||||||
|
// // The target annual inflation rate is recalculated for each previsions cycle. The
|
||||||
|
// // inflation is also subject to a rate change (positive or negative) depending on
|
||||||
|
// // the distance from the desired ratio (67%). The maximum rate change possible is
|
||||||
|
// // defined to be 13% per year, however the annual inflation is capped as between
|
||||||
|
// // 7% and 20%.
|
||||||
|
|
||||||
|
// // (1 - bondedRatio/GoalBonded) * InflationRateChange
|
||||||
|
// inflationRateChangePerYear := sdk.OneDec().
|
||||||
|
// Sub(bondedRatio.Quo(params.GoalBonded)).
|
||||||
|
// Mul(params.InflationRateChange)
|
||||||
|
// inflationRateChange := inflationRateChangePerYear.Quo(sdk.NewDec(int64(params.BlocksPerYear)))
|
||||||
|
|
||||||
|
// // adjust the new annual inflation for this next cycle
|
||||||
|
// inflation := minter.Inflation.Add(inflationRateChange) // note inflationRateChange may be negative
|
||||||
|
// if inflation.GT(params.InflationMax) {
|
||||||
|
// inflation = params.InflationMax
|
||||||
|
// }
|
||||||
|
// if inflation.LT(params.InflationMin) {
|
||||||
|
// inflation = params.InflationMin
|
||||||
|
// }
|
||||||
|
|
||||||
|
ctx.Logger().Info(
|
||||||
|
"nextInflationRate",
|
||||||
|
"bondedRatio", bondedRatio,
|
||||||
|
"circulatingRatio", circulatingRatio,
|
||||||
|
"apy", apy,
|
||||||
|
"inflation", inflation,
|
||||||
|
"params", params,
|
||||||
|
"minter", minter,
|
||||||
|
)
|
||||||
|
return inflation
|
||||||
|
}
|
44
chaincfg/prefix.go
Normal file
44
chaincfg/prefix.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package chaincfg
|
||||||
|
|
||||||
|
import (
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Bech32Prefix defines the Bech32 prefix used for EthAccounts
|
||||||
|
Bech32Prefix = "0g"
|
||||||
|
|
||||||
|
// PrefixAccount is the prefix for account keys
|
||||||
|
PrefixAccount = "acc"
|
||||||
|
// PrefixValidator is the prefix for validator keys
|
||||||
|
PrefixValidator = "val"
|
||||||
|
// PrefixConsensus is the prefix for consensus keys
|
||||||
|
PrefixConsensus = "cons"
|
||||||
|
// PrefixPublic is the prefix for public keys
|
||||||
|
PrefixPublic = "pub"
|
||||||
|
// PrefixOperator is the prefix for operator keys
|
||||||
|
PrefixOperator = "oper"
|
||||||
|
|
||||||
|
// PrefixAddress is the prefix for addresses
|
||||||
|
PrefixAddress = "addr"
|
||||||
|
|
||||||
|
// Bech32PrefixAccAddr defines the Bech32 prefix of an account's address
|
||||||
|
Bech32PrefixAccAddr = Bech32Prefix
|
||||||
|
// Bech32PrefixAccPub defines the Bech32 prefix of an account's public key
|
||||||
|
Bech32PrefixAccPub = Bech32Prefix + PrefixPublic
|
||||||
|
// Bech32PrefixValAddr defines the Bech32 prefix of a validator's operator address
|
||||||
|
Bech32PrefixValAddr = Bech32Prefix + PrefixValidator + PrefixOperator
|
||||||
|
// Bech32PrefixValPub defines the Bech32 prefix of a validator's operator public key
|
||||||
|
Bech32PrefixValPub = Bech32Prefix + PrefixValidator + PrefixOperator + PrefixPublic
|
||||||
|
// Bech32PrefixConsAddr defines the Bech32 prefix of a consensus node address
|
||||||
|
Bech32PrefixConsAddr = Bech32Prefix + PrefixValidator + PrefixConsensus
|
||||||
|
// Bech32PrefixConsPub defines the Bech32 prefix of a consensus node public key
|
||||||
|
Bech32PrefixConsPub = Bech32Prefix + PrefixValidator + PrefixConsensus + PrefixPublic
|
||||||
|
)
|
||||||
|
|
||||||
|
// setBech32Prefixes sets the global prefixes to be used when serializing addresses and public keys to Bech32 strings.
|
||||||
|
func setBech32Prefixes(config *sdk.Config) {
|
||||||
|
config.SetBech32PrefixForAccount(Bech32PrefixAccAddr, Bech32PrefixAccPub)
|
||||||
|
config.SetBech32PrefixForValidator(Bech32PrefixValAddr, Bech32PrefixValPub)
|
||||||
|
config.SetBech32PrefixForConsensusNode(Bech32PrefixConsAddr, Bech32PrefixConsPub)
|
||||||
|
}
|
@ -62,36 +62,36 @@ func TestKvCLIKeysAddRecover(t *testing.T) {
|
|||||||
|
|
||||||
exitSuccess, _, _ = f.KeysAddRecover("test-recover", "dentist task convince chimney quality leave banana trade firm crawl eternal easily")
|
exitSuccess, _, _ = f.KeysAddRecover("test-recover", "dentist task convince chimney quality leave banana trade firm crawl eternal easily")
|
||||||
require.True(t, exitSuccess)
|
require.True(t, exitSuccess)
|
||||||
require.Equal(t, "kava1rsjxn2e4dfl3a2qzuzzjvvgjmmate383g9q4cz", f.KeyAddress("test-recover").String())
|
require.Equal(t, "0g1rsjxn2e4dfl3a2qzuzzjvvgjmmate383g9q4cz", f.KeyAddress("test-recover").String())
|
||||||
|
|
||||||
// test old bip44 coin type
|
// test old bip44 coin type
|
||||||
exitSuccess, _, _ = f.KeysAddRecover("test-recover-legacy", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", "--legacy-hd-path")
|
exitSuccess, _, _ = f.KeysAddRecover("test-recover-legacy", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", "--legacy-hd-path")
|
||||||
require.True(t, exitSuccess)
|
require.True(t, exitSuccess)
|
||||||
require.Equal(t, "kava1qcfdf69js922qrdr4yaww3ax7gjml6pd39p8lj", f.KeyAddress("test-recover-legacy").String())
|
require.Equal(t, "0g1qcfdf69js922qrdr4yaww3ax7gjml6pd39p8lj", f.KeyAddress("test-recover-legacy").String())
|
||||||
|
|
||||||
// Cleanup testing directories
|
// Cleanup testing directories
|
||||||
f.Cleanup()
|
f.Cleanup()
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestKavaCLIKeysAddRecoverHDPath(t *testing.T) {
|
func TestZgChainCLIKeysAddRecoverHDPath(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
f := InitFixtures(t)
|
f := InitFixtures(t)
|
||||||
|
|
||||||
f.KeysAddRecoverHDPath("test-recoverHD1", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", 0, 0)
|
f.KeysAddRecoverHDPath("test-recoverHD1", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", 0, 0)
|
||||||
require.Equal(t, "kava1rsjxn2e4dfl3a2qzuzzjvvgjmmate383g9q4cz", f.KeyAddress("test-recoverHD1").String())
|
require.Equal(t, "0g1rsjxn2e4dfl3a2qzuzzjvvgjmmate383g9q4cz", f.KeyAddress("test-recoverHD1").String())
|
||||||
|
|
||||||
f.KeysAddRecoverHDPath("test-recoverH2", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", 1, 5)
|
f.KeysAddRecoverHDPath("test-recoverH2", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", 1, 5)
|
||||||
require.Equal(t, "kava1qpj6nstqn0n5gzcsaezspuhulje6msjq5t8cq5", f.KeyAddress("test-recoverH2").String())
|
require.Equal(t, "0g1qpj6nstqn0n5gzcsaezspuhulje6msjq5t8cq5", f.KeyAddress("test-recoverH2").String())
|
||||||
|
|
||||||
f.KeysAddRecoverHDPath("test-recoverH3", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", 1, 17)
|
f.KeysAddRecoverHDPath("test-recoverH3", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", 1, 17)
|
||||||
require.Equal(t, "kava1vayfpstgapt7dmv7074kc3ll8xpf0rlzvh4k08", f.KeyAddress("test-recoverH3").String())
|
require.Equal(t, "0g1vayfpstgapt7dmv7074kc3ll8xpf0rlzvh4k08", f.KeyAddress("test-recoverH3").String())
|
||||||
|
|
||||||
f.KeysAddRecoverHDPath("test-recoverH4", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", 2, 17)
|
f.KeysAddRecoverHDPath("test-recoverH4", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", 2, 17)
|
||||||
require.Equal(t, "kava1xvsfnksmhr887skcfrm4pe3va54tkmrtw7wyer", f.KeyAddress("test-recoverH4").String())
|
require.Equal(t, "0g1xvsfnksmhr887skcfrm4pe3va54tkmrtw7wyer", f.KeyAddress("test-recoverH4").String())
|
||||||
|
|
||||||
// test old bip44 coin type
|
// test old bip44 coin type
|
||||||
f.KeysAddRecoverHDPath("test-recoverH5", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", 2, 17, "--legacy-hd-path")
|
f.KeysAddRecoverHDPath("test-recoverH5", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", 2, 17, "--legacy-hd-path")
|
||||||
require.Equal(t, "kava1v9plmhvyhgxk3th9ydacm7j4z357s3nhhmy0tv", f.KeyAddress("test-recoverH5").String())
|
require.Equal(t, "0g1v9plmhvyhgxk3th9ydacm7j4z357s3nhhmy0tv", f.KeyAddress("test-recoverH5").String())
|
||||||
|
|
||||||
exitSuccess, _, _ := f.KeysAddRecover("test-recover-fail", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", "--legacy-hd-path --hd-path 44'/459'/0'/0/0")
|
exitSuccess, _, _ := f.KeysAddRecover("test-recover-fail", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", "--legacy-hd-path --hd-path 44'/459'/0'/0/0")
|
||||||
require.False(t, exitSuccess)
|
require.False(t, exitSuccess)
|
||||||
@ -99,11 +99,11 @@ func TestKavaCLIKeysAddRecoverHDPath(t *testing.T) {
|
|||||||
// test -hd-path flag
|
// test -hd-path flag
|
||||||
exitSuccess, _, _ = f.KeysAddRecover("test-recoverH6", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", "--hd-path 44'/459'/0'/0/0")
|
exitSuccess, _, _ = f.KeysAddRecover("test-recoverH6", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", "--hd-path 44'/459'/0'/0/0")
|
||||||
require.True(t, exitSuccess)
|
require.True(t, exitSuccess)
|
||||||
require.Equal(t, "kava1rsjxn2e4dfl3a2qzuzzjvvgjmmate383g9q4cz", f.KeyAddress("test-recoverH6").String())
|
require.Equal(t, "0g1rsjxn2e4dfl3a2qzuzzjvvgjmmate383g9q4cz", f.KeyAddress("test-recoverH6").String())
|
||||||
|
|
||||||
exitSuccess, _, _ = f.KeysAddRecover("test-recoverH7", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", "--hd-path 44'/459'/2'/0/17")
|
exitSuccess, _, _ = f.KeysAddRecover("test-recoverH7", "dentist task convince chimney quality leave banana trade firm crawl eternal easily", "--hd-path 44'/459'/2'/0/17")
|
||||||
require.True(t, exitSuccess)
|
require.True(t, exitSuccess)
|
||||||
require.Equal(t, "kava1xvsfnksmhr887skcfrm4pe3va54tkmrtw7wyer", f.KeyAddress("test-recoverH7").String())
|
require.Equal(t, "0g1xvsfnksmhr887skcfrm4pe3va54tkmrtw7wyer", f.KeyAddress("test-recoverH7").String())
|
||||||
|
|
||||||
// Cleanup testing directories
|
// Cleanup testing directories
|
||||||
f.Cleanup()
|
f.Cleanup()
|
||||||
|
@ -28,7 +28,7 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/x/slashing"
|
"github.com/cosmos/cosmos-sdk/x/slashing"
|
||||||
"github.com/cosmos/cosmos-sdk/x/staking"
|
"github.com/cosmos/cosmos-sdk/x/staking"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/app"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -65,8 +65,7 @@ var (
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
// set the address prefixes
|
// set the address prefixes
|
||||||
config := sdk.GetConfig()
|
chaincfg.SetSDKConfig()
|
||||||
app.SetBech32AddressPrefixes(config)
|
|
||||||
// config.Seal()
|
// config.Seal()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,7 +91,7 @@ type Fixtures struct {
|
|||||||
|
|
||||||
// NewFixtures creates a new instance of Fixtures with many vars set
|
// NewFixtures creates a new instance of Fixtures with many vars set
|
||||||
func NewFixtures(t *testing.T) *Fixtures {
|
func NewFixtures(t *testing.T) *Fixtures {
|
||||||
tmpDir, err := ioutil.TempDir("", "kava_integration_"+t.Name()+"_")
|
tmpDir, err := ioutil.TempDir("", "0gchain_integration_"+t.Name()+"_")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
servAddr, port, err := server.FreeTCPAddr()
|
servAddr, port, err := server.FreeTCPAddr()
|
||||||
@ -201,9 +200,9 @@ func (f *Fixtures) Flags() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//___________________________________________________________________________________
|
//___________________________________________________________________________________
|
||||||
// kavad
|
// 0gchaind
|
||||||
|
|
||||||
// UnsafeResetAll is kavad unsafe-reset-all
|
// UnsafeResetAll is 0gchaind unsafe-reset-all
|
||||||
func (f *Fixtures) UnsafeResetAll(flags ...string) {
|
func (f *Fixtures) UnsafeResetAll(flags ...string) {
|
||||||
cmd := fmt.Sprintf("%s --home=%s unsafe-reset-all", f.KvdBinary, f.KvdHome)
|
cmd := fmt.Sprintf("%s --home=%s unsafe-reset-all", f.KvdBinary, f.KvdHome)
|
||||||
executeWrite(f.T, addFlags(cmd, flags))
|
executeWrite(f.T, addFlags(cmd, flags))
|
||||||
@ -211,7 +210,7 @@ func (f *Fixtures) UnsafeResetAll(flags ...string) {
|
|||||||
require.NoError(f.T, err)
|
require.NoError(f.T, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// KvInit is kavad init
|
// KvInit is 0gchaind init
|
||||||
// NOTE: KvInit sets the ChainID for the Fixtures instance
|
// NOTE: KvInit sets the ChainID for the Fixtures instance
|
||||||
func (f *Fixtures) KvInit(moniker string, flags ...string) {
|
func (f *Fixtures) KvInit(moniker string, flags ...string) {
|
||||||
cmd := fmt.Sprintf("%s init -o --home=%s %s", f.KvdBinary, f.KvdHome, moniker)
|
cmd := fmt.Sprintf("%s init -o --home=%s %s", f.KvdBinary, f.KvdHome, moniker)
|
||||||
@ -229,25 +228,25 @@ func (f *Fixtures) KvInit(moniker string, flags ...string) {
|
|||||||
f.ChainID = chainID
|
f.ChainID = chainID
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddGenesisAccount is kavad add-genesis-account
|
// AddGenesisAccount is 0gchaind add-genesis-account
|
||||||
func (f *Fixtures) AddGenesisAccount(address sdk.AccAddress, coins sdk.Coins, flags ...string) {
|
func (f *Fixtures) AddGenesisAccount(address sdk.AccAddress, coins sdk.Coins, flags ...string) {
|
||||||
cmd := fmt.Sprintf("%s add-genesis-account %s %s --home=%s --keyring-backend=test", f.KvdBinary, address, coins, f.KvdHome)
|
cmd := fmt.Sprintf("%s add-genesis-account %s %s --home=%s --keyring-backend=test", f.KvdBinary, address, coins, f.KvdHome)
|
||||||
executeWriteCheckErr(f.T, addFlags(cmd, flags))
|
executeWriteCheckErr(f.T, addFlags(cmd, flags))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GenTx is kavad gentx
|
// GenTx is 0gchaind gentx
|
||||||
func (f *Fixtures) GenTx(name string, flags ...string) {
|
func (f *Fixtures) GenTx(name string, flags ...string) {
|
||||||
cmd := fmt.Sprintf("%s gentx --name=%s --home=%s --home-client=%s --keyring-backend=test", f.KvdBinary, name, f.KvdHome, f.KvcliHome)
|
cmd := fmt.Sprintf("%s gentx --name=%s --home=%s --home-client=%s --keyring-backend=test", f.KvdBinary, name, f.KvdHome, f.KvcliHome)
|
||||||
executeWriteCheckErr(f.T, addFlags(cmd, flags))
|
executeWriteCheckErr(f.T, addFlags(cmd, flags))
|
||||||
}
|
}
|
||||||
|
|
||||||
// CollectGenTxs is kavad collect-gentxs
|
// CollectGenTxs is 0gchaind collect-gentxs
|
||||||
func (f *Fixtures) CollectGenTxs(flags ...string) {
|
func (f *Fixtures) CollectGenTxs(flags ...string) {
|
||||||
cmd := fmt.Sprintf("%s collect-gentxs --home=%s", f.KvdBinary, f.KvdHome)
|
cmd := fmt.Sprintf("%s collect-gentxs --home=%s", f.KvdBinary, f.KvdHome)
|
||||||
executeWriteCheckErr(f.T, addFlags(cmd, flags))
|
executeWriteCheckErr(f.T, addFlags(cmd, flags))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GDStart runs kavad start with the appropriate flags and returns a process
|
// GDStart runs 0gchaind start with the appropriate flags and returns a process
|
||||||
func (f *Fixtures) GDStart(flags ...string) *tests.Process {
|
func (f *Fixtures) GDStart(flags ...string) *tests.Process {
|
||||||
cmd := fmt.Sprintf("%s start --home=%s --rpc.laddr=%v --p2p.laddr=%v --pruning=everything", f.KvdBinary, f.KvdHome, f.RPCAddr, f.P2PAddr)
|
cmd := fmt.Sprintf("%s start --home=%s --rpc.laddr=%v --p2p.laddr=%v --pruning=everything", f.KvdBinary, f.KvdHome, f.RPCAddr, f.P2PAddr)
|
||||||
proc := tests.GoExecuteTWithStdout(f.T, addFlags(cmd, flags))
|
proc := tests.GoExecuteTWithStdout(f.T, addFlags(cmd, flags))
|
||||||
@ -256,7 +255,7 @@ func (f *Fixtures) GDStart(flags ...string) *tests.Process {
|
|||||||
return proc
|
return proc
|
||||||
}
|
}
|
||||||
|
|
||||||
// GDTendermint returns the results of kavad tendermint [query]
|
// GDTendermint returns the results of 0gchaind tendermint [query]
|
||||||
func (f *Fixtures) GDTendermint(query string) string {
|
func (f *Fixtures) GDTendermint(query string) string {
|
||||||
cmd := fmt.Sprintf("%s tendermint %s --home=%s", f.KvdBinary, query, f.KvdHome)
|
cmd := fmt.Sprintf("%s tendermint %s --home=%s", f.KvdBinary, query, f.KvdHome)
|
||||||
success, stdout, stderr := executeWriteRetStdStreams(f.T, cmd)
|
success, stdout, stderr := executeWriteRetStdStreams(f.T, cmd)
|
||||||
@ -265,7 +264,7 @@ func (f *Fixtures) GDTendermint(query string) string {
|
|||||||
return strings.TrimSpace(stdout)
|
return strings.TrimSpace(stdout)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ValidateGenesis runs kavad validate-genesis
|
// ValidateGenesis runs 0gchaind validate-genesis
|
||||||
func (f *Fixtures) ValidateGenesis() {
|
func (f *Fixtures) ValidateGenesis() {
|
||||||
cmd := fmt.Sprintf("%s validate-genesis --home=%s", f.KvdBinary, f.KvdHome)
|
cmd := fmt.Sprintf("%s validate-genesis --home=%s", f.KvdBinary, f.KvdHome)
|
||||||
executeWriteCheckErr(f.T, cmd)
|
executeWriteCheckErr(f.T, cmd)
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
},
|
},
|
||||||
"externalDocs": {
|
"externalDocs": {
|
||||||
"description": "GitHub",
|
"description": "GitHub",
|
||||||
"url": "https://github.com/Kava-Labs/kava"
|
"url": "https://github.com/0glabs/0g-chain"
|
||||||
},
|
},
|
||||||
"host": "api.data.kava.io",
|
"host": "api.data.kava.io",
|
||||||
"schemes": ["https"],
|
"schemes": ["https"],
|
||||||
|
@ -5,7 +5,7 @@ info:
|
|||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
externalDocs:
|
externalDocs:
|
||||||
description: GitHub
|
description: GitHub
|
||||||
url: https://github.com/Kava-Labs/kava
|
url: https://github.com/0glabs/0g-chain
|
||||||
host: api.data.kava.io
|
host: api.data.kava.io
|
||||||
schemes:
|
schemes:
|
||||||
- https
|
- https
|
||||||
|
@ -16,7 +16,7 @@ The Kava gRPC client is a tool for making gRPC queries on a Kava chain.
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
kavaGrpc "github.com/kava-labs/kava/client/grpc"
|
kavaGrpc "github.com/0glabs/0g-chain/client/grpc"
|
||||||
)
|
)
|
||||||
grpcUrl := "https://grpc.kava.io:443"
|
grpcUrl := "https://grpc.kava.io:443"
|
||||||
client, err := kavaGrpc.NewClient(grpcUrl)
|
client, err := kavaGrpc.NewClient(grpcUrl)
|
||||||
@ -46,7 +46,7 @@ Example: Query Kava module `x/evmutil` for params
|
|||||||
|
|
||||||
```go
|
```go
|
||||||
import (
|
import (
|
||||||
evmutiltypes "github.com/kava-labs/kava/x/evmutil/types"
|
evmutiltypes "github.com/0glabs/0g-chain/x/evmutil/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
rsp, err := client.Query.Evmutil.Params(
|
rsp, err := client.Query.Evmutil.Params(
|
||||||
|
@ -3,8 +3,8 @@ package grpc
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/client/grpc/query"
|
"github.com/0glabs/0g-chain/client/grpc/query"
|
||||||
"github.com/kava-labs/kava/client/grpc/util"
|
"github.com/0glabs/0g-chain/client/grpc/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
// KavaGrpcClient enables the usage of kava grpc query clients and query utils
|
// KavaGrpcClient enables the usage of kava grpc query clients and query utils
|
||||||
|
@ -3,7 +3,7 @@ package grpc_test
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/client/grpc"
|
"github.com/0glabs/0g-chain/client/grpc"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -24,21 +24,11 @@ import (
|
|||||||
evmtypes "github.com/evmos/ethermint/x/evm/types"
|
evmtypes "github.com/evmos/ethermint/x/evm/types"
|
||||||
feemarkettypes "github.com/evmos/ethermint/x/feemarket/types"
|
feemarkettypes "github.com/evmos/ethermint/x/feemarket/types"
|
||||||
|
|
||||||
auctiontypes "github.com/kava-labs/kava/x/auction/types"
|
bep3types "github.com/0glabs/0g-chain/x/bep3/types"
|
||||||
bep3types "github.com/kava-labs/kava/x/bep3/types"
|
committeetypes "github.com/0glabs/0g-chain/x/committee/types"
|
||||||
cdptypes "github.com/kava-labs/kava/x/cdp/types"
|
evmutiltypes "github.com/0glabs/0g-chain/x/evmutil/types"
|
||||||
committeetypes "github.com/kava-labs/kava/x/committee/types"
|
issuancetypes "github.com/0glabs/0g-chain/x/issuance/types"
|
||||||
communitytypes "github.com/kava-labs/kava/x/community/types"
|
pricefeedtypes "github.com/0glabs/0g-chain/x/pricefeed/types"
|
||||||
earntypes "github.com/kava-labs/kava/x/earn/types"
|
|
||||||
evmutiltypes "github.com/kava-labs/kava/x/evmutil/types"
|
|
||||||
hardtypes "github.com/kava-labs/kava/x/hard/types"
|
|
||||||
incentivetypes "github.com/kava-labs/kava/x/incentive/types"
|
|
||||||
issuancetypes "github.com/kava-labs/kava/x/issuance/types"
|
|
||||||
kavadisttypes "github.com/kava-labs/kava/x/kavadist/types"
|
|
||||||
liquidtypes "github.com/kava-labs/kava/x/liquid/types"
|
|
||||||
pricefeedtypes "github.com/kava-labs/kava/x/pricefeed/types"
|
|
||||||
savingstypes "github.com/kava-labs/kava/x/savings/types"
|
|
||||||
swaptypes "github.com/kava-labs/kava/x/swap/types"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// QueryClient is a wrapper with all Cosmos and Kava grpc query clients
|
// QueryClient is a wrapper with all Cosmos and Kava grpc query clients
|
||||||
@ -70,21 +60,11 @@ type QueryClient struct {
|
|||||||
|
|
||||||
// kava module query clients
|
// kava module query clients
|
||||||
|
|
||||||
Auction auctiontypes.QueryClient
|
|
||||||
Bep3 bep3types.QueryClient
|
Bep3 bep3types.QueryClient
|
||||||
Cdp cdptypes.QueryClient
|
|
||||||
Committee committeetypes.QueryClient
|
Committee committeetypes.QueryClient
|
||||||
Community communitytypes.QueryClient
|
|
||||||
Earn earntypes.QueryClient
|
|
||||||
Evmutil evmutiltypes.QueryClient
|
Evmutil evmutiltypes.QueryClient
|
||||||
Hard hardtypes.QueryClient
|
|
||||||
Incentive incentivetypes.QueryClient
|
|
||||||
Issuance issuancetypes.QueryClient
|
Issuance issuancetypes.QueryClient
|
||||||
Kavadist kavadisttypes.QueryClient
|
|
||||||
Liquid liquidtypes.QueryClient
|
|
||||||
Pricefeed pricefeedtypes.QueryClient
|
Pricefeed pricefeedtypes.QueryClient
|
||||||
Savings savingstypes.QueryClient
|
|
||||||
Swap swaptypes.QueryClient
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewQueryClient creates a new QueryClient and initializes all the module query clients
|
// NewQueryClient creates a new QueryClient and initializes all the module query clients
|
||||||
@ -115,21 +95,11 @@ func NewQueryClient(grpcEndpoint string) (*QueryClient, error) {
|
|||||||
IbcClient: ibcclienttypes.NewQueryClient(conn),
|
IbcClient: ibcclienttypes.NewQueryClient(conn),
|
||||||
IbcTransfer: ibctransfertypes.NewQueryClient(conn),
|
IbcTransfer: ibctransfertypes.NewQueryClient(conn),
|
||||||
|
|
||||||
Auction: auctiontypes.NewQueryClient(conn),
|
|
||||||
Bep3: bep3types.NewQueryClient(conn),
|
Bep3: bep3types.NewQueryClient(conn),
|
||||||
Cdp: cdptypes.NewQueryClient(conn),
|
|
||||||
Committee: committeetypes.NewQueryClient(conn),
|
Committee: committeetypes.NewQueryClient(conn),
|
||||||
Community: communitytypes.NewQueryClient(conn),
|
|
||||||
Earn: earntypes.NewQueryClient(conn),
|
|
||||||
Evmutil: evmutiltypes.NewQueryClient(conn),
|
Evmutil: evmutiltypes.NewQueryClient(conn),
|
||||||
Hard: hardtypes.NewQueryClient(conn),
|
|
||||||
Incentive: incentivetypes.NewQueryClient(conn),
|
|
||||||
Issuance: issuancetypes.NewQueryClient(conn),
|
Issuance: issuancetypes.NewQueryClient(conn),
|
||||||
Kavadist: kavadisttypes.NewQueryClient(conn),
|
|
||||||
Liquid: liquidtypes.NewQueryClient(conn),
|
|
||||||
Pricefeed: pricefeedtypes.NewQueryClient(conn),
|
Pricefeed: pricefeedtypes.NewQueryClient(conn),
|
||||||
Savings: savingstypes.NewQueryClient(conn),
|
|
||||||
Swap: swaptypes.NewQueryClient(conn),
|
|
||||||
}
|
}
|
||||||
return client, nil
|
return client, nil
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ package query_test
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/client/grpc/query"
|
"github.com/0glabs/0g-chain/client/grpc/query"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -55,20 +55,10 @@ func TestNewQueryClient_ValidClient(t *testing.T) {
|
|||||||
require.NotNil(t, client.IbcTransfer)
|
require.NotNil(t, client.IbcTransfer)
|
||||||
|
|
||||||
// validate kava clients
|
// validate kava clients
|
||||||
require.NotNil(t, client.Auction)
|
|
||||||
require.NotNil(t, client.Bep3)
|
require.NotNil(t, client.Bep3)
|
||||||
require.NotNil(t, client.Cdp)
|
|
||||||
require.NotNil(t, client.Committee)
|
require.NotNil(t, client.Committee)
|
||||||
require.NotNil(t, client.Community)
|
|
||||||
require.NotNil(t, client.Earn)
|
|
||||||
require.NotNil(t, client.Evmutil)
|
require.NotNil(t, client.Evmutil)
|
||||||
require.NotNil(t, client.Hard)
|
|
||||||
require.NotNil(t, client.Incentive)
|
|
||||||
require.NotNil(t, client.Issuance)
|
require.NotNil(t, client.Issuance)
|
||||||
require.NotNil(t, client.Kavadist)
|
|
||||||
require.NotNil(t, client.Liquid)
|
|
||||||
require.NotNil(t, client.Pricefeed)
|
require.NotNil(t, client.Pricefeed)
|
||||||
require.NotNil(t, client.Savings)
|
|
||||||
require.NotNil(t, client.Swap)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -7,9 +7,9 @@ import (
|
|||||||
grpctypes "github.com/cosmos/cosmos-sdk/types/grpc"
|
grpctypes "github.com/cosmos/cosmos-sdk/types/grpc"
|
||||||
"google.golang.org/grpc/metadata"
|
"google.golang.org/grpc/metadata"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/app"
|
||||||
"github.com/kava-labs/kava/app/params"
|
"github.com/0glabs/0g-chain/app/params"
|
||||||
query "github.com/kava-labs/kava/client/grpc/query"
|
query "github.com/0glabs/0g-chain/client/grpc/query"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Util contains utility functions for the Kava gRPC client
|
// Util contains utility functions for the Kava gRPC client
|
||||||
|
@ -13,6 +13,7 @@ import (
|
|||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
simappparams "cosmossdk.io/simapp/params"
|
simappparams "cosmossdk.io/simapp/params"
|
||||||
|
"github.com/0glabs/0g-chain/client/rest"
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
@ -20,7 +21,6 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||||
"github.com/cosmos/cosmos-sdk/types"
|
"github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/kava-labs/kava/client/rest"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestBaseReq_Sanitize(t *testing.T) {
|
func TestBaseReq_Sanitize(t *testing.T) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package cmd
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
@ -23,9 +23,8 @@ import (
|
|||||||
"github.com/spf13/cast"
|
"github.com/spf13/cast"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/app"
|
||||||
"github.com/kava-labs/kava/app/params"
|
"github.com/0glabs/0g-chain/app/params"
|
||||||
metricstypes "github.com/kava-labs/kava/x/metrics/types"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -34,7 +33,7 @@ const (
|
|||||||
flagSkipLoadLatest = "skip-load-latest"
|
flagSkipLoadLatest = "skip-load-latest"
|
||||||
)
|
)
|
||||||
|
|
||||||
// appCreator holds functions used by the sdk server to control the kava app.
|
// appCreator holds functions used by the sdk server to control the 0g-chain app.
|
||||||
// The methods implement types in cosmos-sdk/server/types
|
// The methods implement types in cosmos-sdk/server/types
|
||||||
type appCreator struct {
|
type appCreator struct {
|
||||||
encodingConfig params.EncodingConfig
|
encodingConfig params.EncodingConfig
|
||||||
@ -118,7 +117,6 @@ func (ac appCreator) newApp(
|
|||||||
MempoolAuthAddresses: mempoolAuthAddresses,
|
MempoolAuthAddresses: mempoolAuthAddresses,
|
||||||
EVMTrace: cast.ToString(appOpts.Get(ethermintflags.EVMTracer)),
|
EVMTrace: cast.ToString(appOpts.Get(ethermintflags.EVMTracer)),
|
||||||
EVMMaxGasWanted: cast.ToUint64(appOpts.Get(ethermintflags.EVMMaxTxGasWanted)),
|
EVMMaxGasWanted: cast.ToUint64(appOpts.Get(ethermintflags.EVMMaxTxGasWanted)),
|
||||||
TelemetryOptions: metricstypes.TelemetryOptionsFromAppOpts(appOpts),
|
|
||||||
},
|
},
|
||||||
baseapp.SetPruning(pruningOpts),
|
baseapp.SetPruning(pruningOpts),
|
||||||
baseapp.SetMinGasPrices(strings.Replace(cast.ToString(appOpts.Get(server.FlagMinGasPrices)), ";", ",", -1)),
|
baseapp.SetMinGasPrices(strings.Replace(cast.ToString(appOpts.Get(server.FlagMinGasPrices)), ";", ",", -1)),
|
@ -1,4 +1,4 @@
|
|||||||
package cmd
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
@ -9,8 +9,8 @@ import (
|
|||||||
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
|
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/app"
|
||||||
"github.com/kava-labs/kava/app/params"
|
"github.com/0glabs/0g-chain/app/params"
|
||||||
)
|
)
|
||||||
|
|
||||||
func AssertInvariantsCmd(config params.EncodingConfig) *cobra.Command {
|
func AssertInvariantsCmd(config params.EncodingConfig) *cobra.Command {
|
@ -1,5 +1,5 @@
|
|||||||
// Sourced from https://github.com/evmos/ethermint/blob/main/cmd/ethermintd/genaccounts.go
|
// Sourced from https://github.com/evmos/ethermint/blob/main/cmd/ethermintd/genaccounts.go
|
||||||
package cmd
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
@ -1,4 +1,4 @@
|
|||||||
package cmd
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
@ -52,6 +52,13 @@ The pass backend requires GnuPG: https://gnupg.org/
|
|||||||
addCmd := keys.AddKeyCommand()
|
addCmd := keys.AddKeyCommand()
|
||||||
addCmd.Flags().Bool(ethFlag, false, "use default evm coin-type (60) and key signing algorithm (\"eth_secp256k1\")")
|
addCmd.Flags().Bool(ethFlag, false, "use default evm coin-type (60) and key signing algorithm (\"eth_secp256k1\")")
|
||||||
|
|
||||||
|
algoFlag := addCmd.Flag(flags.FlagKeyType)
|
||||||
|
algoFlag.DefValue = string(hd.EthSecp256k1Type)
|
||||||
|
err := algoFlag.Value.Set(string(hd.EthSecp256k1Type))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
addCmd.RunE = runAddCmd
|
addCmd.RunE = runAddCmd
|
||||||
|
|
||||||
cmd.AddCommand(
|
cmd.AddCommand(
|
@ -6,14 +6,15 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/server"
|
"github.com/cosmos/cosmos-sdk/server"
|
||||||
svrcmd "github.com/cosmos/cosmos-sdk/server/cmd"
|
svrcmd "github.com/cosmos/cosmos-sdk/server/cmd"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/chaincfg"
|
||||||
"github.com/kava-labs/kava/cmd/kava/cmd"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
rootCmd := cmd.NewRootCmd()
|
chaincfg.SetSDKConfig().Seal()
|
||||||
|
|
||||||
if err := svrcmd.Execute(rootCmd, cmd.EnvPrefix, app.DefaultNodeHome); err != nil {
|
rootCmd := NewRootCmd()
|
||||||
|
|
||||||
|
if err := svrcmd.Execute(rootCmd, chaincfg.EnvPrefix, chaincfg.DefaultNodeHome); err != nil {
|
||||||
switch e := err.(type) {
|
switch e := err.(type) {
|
||||||
case server.ErrorCode:
|
case server.ErrorCode:
|
||||||
os.Exit(e.Code)
|
os.Exit(e.Code)
|
@ -1,4 +1,4 @@
|
|||||||
package cmd
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
@ -7,7 +7,7 @@ import (
|
|||||||
authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli"
|
authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/app"
|
||||||
)
|
)
|
||||||
|
|
||||||
// newQueryCmd creates all the commands for querying blockchain state.
|
// newQueryCmd creates all the commands for querying blockchain state.
|
@ -14,9 +14,9 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/0glabs/0g-chain/cmd/opendb"
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/server"
|
"github.com/cosmos/cosmos-sdk/server"
|
||||||
"github.com/kava-labs/kava/cmd/kava/opendb"
|
|
||||||
"github.com/linxGnu/grocksdb"
|
"github.com/linxGnu/grocksdb"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"golang.org/x/exp/slices"
|
"golang.org/x/exp/slices"
|
@ -1,4 +1,4 @@
|
|||||||
package cmd
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -8,6 +8,7 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/client/config"
|
"github.com/cosmos/cosmos-sdk/client/config"
|
||||||
"github.com/cosmos/cosmos-sdk/client/debug"
|
"github.com/cosmos/cosmos-sdk/client/debug"
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
|
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||||
"github.com/cosmos/cosmos-sdk/server"
|
"github.com/cosmos/cosmos-sdk/server"
|
||||||
|
|
||||||
tmcfg "github.com/cometbft/cometbft/config"
|
tmcfg "github.com/cometbft/cometbft/config"
|
||||||
@ -15,30 +16,39 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/x/auth/types"
|
"github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||||
"github.com/cosmos/cosmos-sdk/x/genutil"
|
"github.com/cosmos/cosmos-sdk/x/genutil"
|
||||||
genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli"
|
|
||||||
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
|
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
|
||||||
|
|
||||||
|
genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli"
|
||||||
ethermintclient "github.com/evmos/ethermint/client"
|
ethermintclient "github.com/evmos/ethermint/client"
|
||||||
"github.com/evmos/ethermint/crypto/hd"
|
"github.com/evmos/ethermint/crypto/hd"
|
||||||
ethermintserver "github.com/evmos/ethermint/server"
|
ethermintserver "github.com/evmos/ethermint/server"
|
||||||
servercfg "github.com/evmos/ethermint/server/config"
|
servercfg "github.com/evmos/ethermint/server/config"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/app"
|
||||||
"github.com/kava-labs/kava/app/params"
|
"github.com/0glabs/0g-chain/app/params"
|
||||||
"github.com/kava-labs/kava/cmd/kava/cmd/iavlviewer"
|
"github.com/0glabs/0g-chain/chaincfg"
|
||||||
"github.com/kava-labs/kava/cmd/kava/cmd/rocksdb"
|
"github.com/0glabs/0g-chain/cmd/0gchaind/iavlviewer"
|
||||||
"github.com/kava-labs/kava/cmd/kava/opendb"
|
"github.com/0glabs/0g-chain/cmd/0gchaind/rocksdb"
|
||||||
|
"github.com/0glabs/0g-chain/cmd/opendb"
|
||||||
|
"github.com/0glabs/0g-chain/crypto/vrf"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func customKeyringOptions() keyring.Option {
|
||||||
|
return func(options *keyring.Options) {
|
||||||
|
options.SupportedAlgos = append(hd.SupportedAlgorithms, vrf.VrfAlgo)
|
||||||
|
options.SupportedAlgosLedger = append(hd.SupportedAlgorithmsLedger, vrf.VrfAlgo)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// EnvPrefix is the prefix environment variables must have to configure the app.
|
// EnvPrefix is the prefix environment variables must have to configure the app.
|
||||||
const EnvPrefix = "KAVA"
|
const EnvPrefix = "KAVA"
|
||||||
|
|
||||||
// NewRootCmd creates a new root command for the kava blockchain.
|
// NewRootCmd creates a new root command for the 0g-chain blockchain.
|
||||||
func NewRootCmd() *cobra.Command {
|
func NewRootCmd() *cobra.Command {
|
||||||
app.SetSDKConfig().Seal()
|
app.SetSDKConfig().Seal()
|
||||||
|
|
||||||
encodingConfig := app.MakeEncodingConfig()
|
encodingConfig := app.MakeEncodingConfig()
|
||||||
|
|
||||||
initClientCtx := client.Context{}.
|
initClientCtx := client.Context{}.
|
||||||
WithCodec(encodingConfig.Marshaler).
|
WithCodec(encodingConfig.Marshaler).
|
||||||
WithInterfaceRegistry(encodingConfig.InterfaceRegistry).
|
WithInterfaceRegistry(encodingConfig.InterfaceRegistry).
|
||||||
@ -47,13 +57,13 @@ func NewRootCmd() *cobra.Command {
|
|||||||
WithInput(os.Stdin).
|
WithInput(os.Stdin).
|
||||||
WithAccountRetriever(types.AccountRetriever{}).
|
WithAccountRetriever(types.AccountRetriever{}).
|
||||||
WithBroadcastMode(flags.FlagBroadcastMode).
|
WithBroadcastMode(flags.FlagBroadcastMode).
|
||||||
WithHomeDir(app.DefaultNodeHome).
|
WithHomeDir(chaincfg.DefaultNodeHome).
|
||||||
WithKeyringOptions(hd.EthSecp256k1Option()).
|
WithKeyringOptions(customKeyringOptions()).
|
||||||
WithViper(EnvPrefix)
|
WithViper(chaincfg.EnvPrefix)
|
||||||
|
|
||||||
rootCmd := &cobra.Command{
|
rootCmd := &cobra.Command{
|
||||||
Use: "kava",
|
Use: chaincfg.AppName,
|
||||||
Short: "Daemon and CLI for the Kava blockchain.",
|
Short: "Daemon and CLI for the 0g-chain blockchain.",
|
||||||
PersistentPreRunE: func(cmd *cobra.Command, _ []string) error {
|
PersistentPreRunE: func(cmd *cobra.Command, _ []string) error {
|
||||||
cmd.SetOut(cmd.OutOrStdout())
|
cmd.SetOut(cmd.OutOrStdout())
|
||||||
cmd.SetErr(cmd.ErrOrStderr())
|
cmd.SetErr(cmd.ErrOrStderr())
|
||||||
@ -72,7 +82,7 @@ func NewRootCmd() *cobra.Command {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
customAppTemplate, customAppConfig := servercfg.AppConfig("ukava")
|
customAppTemplate, customAppConfig := servercfg.AppConfig(chaincfg.GasDenom)
|
||||||
|
|
||||||
return server.InterceptConfigsPreRunHandler(
|
return server.InterceptConfigsPreRunHandler(
|
||||||
cmd,
|
cmd,
|
||||||
@ -83,12 +93,12 @@ func NewRootCmd() *cobra.Command {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
addSubCmds(rootCmd, encodingConfig, app.DefaultNodeHome)
|
addSubCmds(rootCmd, encodingConfig, chaincfg.DefaultNodeHome)
|
||||||
|
|
||||||
return rootCmd
|
return rootCmd
|
||||||
}
|
}
|
||||||
|
|
||||||
// addSubCmds registers all the sub commands used by kava.
|
// addSubCmds registers all the sub commands used by 0g-chain.
|
||||||
func addSubCmds(rootCmd *cobra.Command, encodingConfig params.EncodingConfig, defaultNodeHome string) {
|
func addSubCmds(rootCmd *cobra.Command, encodingConfig params.EncodingConfig, defaultNodeHome string) {
|
||||||
gentxModule, ok := app.ModuleBasics[genutiltypes.ModuleName].(genutil.AppModuleBasic)
|
gentxModule, ok := app.ModuleBasics[genutiltypes.ModuleName].(genutil.AppModuleBasic)
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -117,7 +127,7 @@ func addSubCmds(rootCmd *cobra.Command, encodingConfig params.EncodingConfig, de
|
|||||||
|
|
||||||
opts := ethermintserver.StartOptions{
|
opts := ethermintserver.StartOptions{
|
||||||
AppCreator: ac.newApp,
|
AppCreator: ac.newApp,
|
||||||
DefaultNodeHome: app.DefaultNodeHome,
|
DefaultNodeHome: chaincfg.DefaultNodeHome,
|
||||||
DBOpener: opendb.OpenDB,
|
DBOpener: opendb.OpenDB,
|
||||||
}
|
}
|
||||||
// ethermintserver adds additional flags to start the JSON-RPC server for evm support
|
// ethermintserver adds additional flags to start the JSON-RPC server for evm support
|
@ -1,10 +1,10 @@
|
|||||||
package cmd
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/app"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
dbm "github.com/cometbft/cometbft-db"
|
dbm "github.com/cometbft/cometbft-db"
|
@ -1,18 +1,16 @@
|
|||||||
package cmd
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
|
||||||
|
|
||||||
"github.com/cometbft/cometbft/libs/bytes"
|
"github.com/cometbft/cometbft/libs/bytes"
|
||||||
"github.com/cometbft/cometbft/p2p"
|
"github.com/cometbft/cometbft/p2p"
|
||||||
coretypes "github.com/cometbft/cometbft/rpc/core/types"
|
coretypes "github.com/cometbft/cometbft/rpc/core/types"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
||||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ValidatorInfo is info about the node's validator, same as Tendermint,
|
// ValidatorInfo is info about the node's validator, same as Tendermint,
|
@ -1,4 +1,4 @@
|
|||||||
package cmd
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
@ -6,7 +6,7 @@ import (
|
|||||||
authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli"
|
authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"github.com/kava-labs/kava/app"
|
"github.com/0glabs/0g-chain/app"
|
||||||
)
|
)
|
||||||
|
|
||||||
// newTxCmd creates all commands for submitting blockchain transactions.
|
// newTxCmd creates all commands for submitting blockchain transactions.
|
@ -4,11 +4,11 @@ pragma solidity ^0.8.18;
|
|||||||
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
|
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
|
||||||
import "@openzeppelin/contracts/access/Ownable.sol";
|
import "@openzeppelin/contracts/access/Ownable.sol";
|
||||||
|
|
||||||
/// @title An ERC20 token contract owned and deployed by the evmutil module of Kava.
|
/// @title An ERC20 token contract owned and deployed by the evmutil module of 0g-chain.
|
||||||
/// Tokens are backed one-for-one by cosmos-sdk coins held in the module account.
|
/// Tokens are backed one-for-one by cosmos-sdk coins held in the module account.
|
||||||
/// @author Kava Labs, LLC
|
/// @author 0g Labs, LLC
|
||||||
/// @custom:security-contact security@kava.io
|
/// @custom:security-contact security@0g.ai
|
||||||
contract ERC20KavaWrappedCosmosCoin is ERC20, Ownable {
|
contract ERC20ZgChainWrappedCosmosCoin is ERC20, Ownable {
|
||||||
/// @notice The decimals places of the token. For display purposes only.
|
/// @notice The decimals places of the token. For display purposes only.
|
||||||
uint8 private immutable _decimals;
|
uint8 private immutable _decimals;
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ const config: HardhatUserConfig = {
|
|||||||
solidity: {
|
solidity: {
|
||||||
version: "0.8.18",
|
version: "0.8.18",
|
||||||
settings: {
|
settings: {
|
||||||
// istanbul upgrade occurred before the london hardfork, so is compatible with kava's evm
|
// istanbul upgrade occurred before the london hardfork, so is compatible with 0g-chain's evm
|
||||||
evmVersion: "istanbul",
|
evmVersion: "istanbul",
|
||||||
// optimize build for deployment to mainnet!
|
// optimize build for deployment to mainnet!
|
||||||
optimizer: {
|
optimizer: {
|
||||||
@ -16,21 +16,21 @@ const config: HardhatUserConfig = {
|
|||||||
},
|
},
|
||||||
networks: {
|
networks: {
|
||||||
// kvtool's local network
|
// kvtool's local network
|
||||||
kava: {
|
chain: {
|
||||||
url: "http://127.0.0.1:8545",
|
url: "http://127.0.0.1:8545",
|
||||||
accounts: [
|
accounts: [
|
||||||
// kava keys unsafe-export-eth-key whale2
|
// 0g-chain keys unsafe-export-eth-key whale2
|
||||||
"AA50F4C6C15190D9E18BF8B14FC09BFBA0E7306331A4F232D10A77C2879E7966",
|
"AA50F4C6C15190D9E18BF8B14FC09BFBA0E7306331A4F232D10A77C2879E7966",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
protonet: {
|
protonet: {
|
||||||
url: "https://evm.app.protonet.us-east.production.kava.io:443",
|
url: "https://evm.app.protonet.us-east.production.0g-chain.io:443",
|
||||||
accounts: [
|
accounts: [
|
||||||
"247069F0BC3A5914CB2FD41E4133BBDAA6DBED9F47A01B9F110B5602C6E4CDD9",
|
"247069F0BC3A5914CB2FD41E4133BBDAA6DBED9F47A01B9F110B5602C6E4CDD9",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
internal_testnet: {
|
internal_testnet: {
|
||||||
url: "https://evm.data.internal.testnet.us-east.production.kava.io:443",
|
url: "https://evm.data.internal.testnet.us-east.production.0g-chain.io:443",
|
||||||
accounts: [
|
accounts: [
|
||||||
"247069F0BC3A5914CB2FD41E4133BBDAA6DBED9F47A01B9F110B5602C6E4CDD9",
|
"247069F0BC3A5914CB2FD41E4133BBDAA6DBED9F47A01B9F110B5602C6E4CDD9",
|
||||||
],
|
],
|
||||||
|
4
contracts/package-lock.json
generated
4
contracts/package-lock.json
generated
@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "kava-contracts",
|
"name": "0g-chain-contracts",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "kava-contracts",
|
"name": "0g-chain-contracts",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nomicfoundation/hardhat-toolbox": "^2.0.2",
|
"@nomicfoundation/hardhat-toolbox": "^2.0.2",
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "kava-contracts",
|
"name": "0g-chain-contracts",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"author": "Kava Labs",
|
"author": "0g Labs",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "Solidity contracts for Kava Blockchain",
|
"description": "Solidity contracts for 0g Blockchain",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18.0.0"
|
"node": ">=18.0.0"
|
||||||
},
|
},
|
||||||
@ -12,7 +12,7 @@
|
|||||||
"clean": "hardhat clean",
|
"clean": "hardhat clean",
|
||||||
"compile": "hardhat compile",
|
"compile": "hardhat compile",
|
||||||
"coverage": "hardhat coverage",
|
"coverage": "hardhat coverage",
|
||||||
"ethermint-json": "jq '{ abi: .abi | tostring, bin: .bytecode | ltrimstr(\"0x\")}' artifacts/contracts/ERC20KavaWrappedCosmosCoin.sol/ERC20KavaWrappedCosmosCoin.json > ../x/evmutil/types/ethermint_json/ERC20KavaWrappedCosmosCoin.json",
|
"ethermint-json": "jq '{ abi: .abi | tostring, bin: .bytecode | ltrimstr(\"0x\")}' artifacts/contracts/ERC20ZgChainWrappedCosmosCoin.sol/ERC20ZgChainWrappedCosmosCoin.json > ../x/evmutil/types/ethermint_json/ERC20ZgChainWrappedCosmosCoin.json",
|
||||||
"gen-ts-types": "hardhat typechain",
|
"gen-ts-types": "hardhat typechain",
|
||||||
"lint": "eslint '**/*.{js,ts}'",
|
"lint": "eslint '**/*.{js,ts}'",
|
||||||
"lint-fix": "eslint '**/*.{js,ts}' --fix",
|
"lint-fix": "eslint '**/*.{js,ts}' --fix",
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
import { ethers } from "hardhat";
|
import { ethers } from "hardhat";
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
const tokenName = "Kava-wrapped ATOM";
|
const tokenName = "0g-chain-wrapped ATOM";
|
||||||
const tokenSymbol = "kATOM";
|
const tokenSymbol = "kATOM";
|
||||||
const tokenDecimals = 6;
|
const tokenDecimals = 6;
|
||||||
|
|
||||||
const ERC20KavaWrappedCosmosCoin = await ethers.getContractFactory(
|
const ERC20ZgChainWrappedCosmosCoin = await ethers.getContractFactory(
|
||||||
"ERC20KavaWrappedCosmosCoin"
|
"ERC20ZgChainWrappedCosmosCoin"
|
||||||
);
|
);
|
||||||
const token = await ERC20KavaWrappedCosmosCoin.deploy(
|
const token = await ERC20ZgChainWrappedCosmosCoin.deploy(
|
||||||
tokenName,
|
tokenName,
|
||||||
tokenSymbol,
|
tokenSymbol,
|
||||||
tokenDecimals
|
tokenDecimals
|
||||||
|
@ -2,21 +2,21 @@ import { expect } from "chai";
|
|||||||
import { Signer } from "ethers";
|
import { Signer } from "ethers";
|
||||||
import { ethers } from "hardhat";
|
import { ethers } from "hardhat";
|
||||||
import {
|
import {
|
||||||
ERC20KavaWrappedCosmosCoin,
|
ERC20ZgChainWrappedCosmosCoin,
|
||||||
ERC20KavaWrappedCosmosCoin__factory as ERC20KavaWrappedCosmosCoinFactory,
|
ERC20ZgChainWrappedCosmosCoin__factory as ERC20ZgChainWrappedCosmosCoinFactory,
|
||||||
} from "../typechain-types";
|
} from "../typechain-types";
|
||||||
|
|
||||||
const decimals = 6n;
|
const decimals = 6n;
|
||||||
|
|
||||||
describe("ERC20KavaWrappedCosmosCoin", function () {
|
describe("ERC20ZgChainWrappedCosmosCoin", function () {
|
||||||
let erc20: ERC20KavaWrappedCosmosCoin;
|
let erc20: ERC20ZgChainWrappedCosmosCoin;
|
||||||
let erc20Factory: ERC20KavaWrappedCosmosCoinFactory;
|
let erc20Factory: ERC20ZgChainWrappedCosmosCoinFactory;
|
||||||
let owner: Signer;
|
let owner: Signer;
|
||||||
let sender: Signer;
|
let sender: Signer;
|
||||||
|
|
||||||
beforeEach(async function () {
|
beforeEach(async function () {
|
||||||
erc20Factory = await ethers.getContractFactory(
|
erc20Factory = await ethers.getContractFactory(
|
||||||
"ERC20KavaWrappedCosmosCoin"
|
"ERC20ZgChainWrappedCosmosCoin"
|
||||||
);
|
);
|
||||||
erc20 = await erc20Factory.deploy("Wrapped ATOM", "ATOM", decimals);
|
erc20 = await erc20Factory.deploy("Wrapped ATOM", "ATOM", decimals);
|
||||||
[owner, sender] = await ethers.getSigners();
|
[owner, sender] = await ethers.getSigners();
|
||||||
|
166
crypto/bn254util/bn254util.go
Normal file
166
crypto/bn254util/bn254util.go
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
package bn254util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"math/big"
|
||||||
|
|
||||||
|
"github.com/consensys/gnark-crypto/ecc/bn254"
|
||||||
|
"github.com/consensys/gnark-crypto/ecc/bn254/fp"
|
||||||
|
"github.com/consensys/gnark-crypto/ecc/bn254/fr"
|
||||||
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
G1PointSize = 32 * 2
|
||||||
|
G2PointSize = 32 * 2 * 2
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
FR_MODULUS, _ = new(big.Int).SetString("21888242871839275222246405745257275088548364400416034343698204186575808495617", 10)
|
||||||
|
)
|
||||||
|
|
||||||
|
func VerifySig(sig *bn254.G1Affine, pubkey *bn254.G2Affine, msgBytes [32]byte) (bool, error) {
|
||||||
|
|
||||||
|
g2Gen := GetG2Generator()
|
||||||
|
|
||||||
|
msgPoint := MapToCurve(msgBytes)
|
||||||
|
|
||||||
|
var negSig bn254.G1Affine
|
||||||
|
negSig.Neg((*bn254.G1Affine)(sig))
|
||||||
|
|
||||||
|
P := [2]bn254.G1Affine{*msgPoint, negSig}
|
||||||
|
Q := [2]bn254.G2Affine{*pubkey, *g2Gen}
|
||||||
|
|
||||||
|
ok, err := bn254.PairingCheck(P[:], Q[:])
|
||||||
|
if err != nil {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
return ok, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func MapToCurve(digest [32]byte) *bn254.G1Affine {
|
||||||
|
|
||||||
|
one := new(big.Int).SetUint64(1)
|
||||||
|
three := new(big.Int).SetUint64(3)
|
||||||
|
x := new(big.Int)
|
||||||
|
x.SetBytes(digest[:])
|
||||||
|
for {
|
||||||
|
// y = x^3 + 3
|
||||||
|
xP3 := new(big.Int).Exp(x, big.NewInt(3), fp.Modulus())
|
||||||
|
y := new(big.Int).Add(xP3, three)
|
||||||
|
y.Mod(y, fp.Modulus())
|
||||||
|
|
||||||
|
if y.ModSqrt(y, fp.Modulus()) == nil {
|
||||||
|
x.Add(x, one).Mod(x, fp.Modulus())
|
||||||
|
} else {
|
||||||
|
var fpX, fpY fp.Element
|
||||||
|
fpX.SetBigInt(x)
|
||||||
|
fpY.SetBigInt(y)
|
||||||
|
return &bn254.G1Affine{
|
||||||
|
X: fpX,
|
||||||
|
Y: fpY,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func CheckG1AndG2DiscreteLogEquality(pointG1 *bn254.G1Affine, pointG2 *bn254.G2Affine) (bool, error) {
|
||||||
|
negGenG1 := new(bn254.G1Affine).Neg(GetG1Generator())
|
||||||
|
return bn254.PairingCheck([]bn254.G1Affine{*pointG1, *negGenG1}, []bn254.G2Affine{*GetG2Generator(), *pointG2})
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetG1Generator() *bn254.G1Affine {
|
||||||
|
g1Gen := new(bn254.G1Affine)
|
||||||
|
_, err := g1Gen.X.SetString("1")
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
_, err = g1Gen.Y.SetString("2")
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return g1Gen
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetG2Generator() *bn254.G2Affine {
|
||||||
|
g2Gen := new(bn254.G2Affine)
|
||||||
|
g2Gen.X.SetString("10857046999023057135944570762232829481370756359578518086990519993285655852781",
|
||||||
|
"11559732032986387107991004021392285783925812861821192530917403151452391805634")
|
||||||
|
g2Gen.Y.SetString("8495653923123431417604973247489272438418190587263600148770280649306958101930",
|
||||||
|
"4082367875863433681332203403145435568316851327593401208105741076214120093531")
|
||||||
|
return g2Gen
|
||||||
|
}
|
||||||
|
|
||||||
|
func MulByGeneratorG1(a *fr.Element) *bn254.G1Affine {
|
||||||
|
g1Gen := GetG1Generator()
|
||||||
|
return new(bn254.G1Affine).ScalarMultiplication(g1Gen, a.BigInt(new(big.Int)))
|
||||||
|
}
|
||||||
|
|
||||||
|
func MulByGeneratorG2(a *fr.Element) *bn254.G2Affine {
|
||||||
|
g2Gen := GetG2Generator()
|
||||||
|
return new(bn254.G2Affine).ScalarMultiplication(g2Gen, a.BigInt(new(big.Int)))
|
||||||
|
}
|
||||||
|
|
||||||
|
func SerializeG1(p *bn254.G1Affine) []byte {
|
||||||
|
b := make([]byte, 0)
|
||||||
|
tmp := p.X.Bytes()
|
||||||
|
for i := 0; i < 32; i++ {
|
||||||
|
b = append(b, tmp[i])
|
||||||
|
}
|
||||||
|
tmp = p.Y.Bytes()
|
||||||
|
for i := 0; i < 32; i++ {
|
||||||
|
b = append(b, tmp[i])
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeserializeG1(b []byte) *bn254.G1Affine {
|
||||||
|
p := new(bn254.G1Affine)
|
||||||
|
p.X.SetBytes(b[0:32])
|
||||||
|
p.Y.SetBytes(b[32:64])
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
func SerializeG2(p *bn254.G2Affine) []byte {
|
||||||
|
b := make([]byte, 0)
|
||||||
|
tmp := p.X.A0.Bytes()
|
||||||
|
for i := 0; i < 32; i++ {
|
||||||
|
b = append(b, tmp[i])
|
||||||
|
}
|
||||||
|
tmp = p.X.A1.Bytes()
|
||||||
|
for i := 0; i < 32; i++ {
|
||||||
|
b = append(b, tmp[i])
|
||||||
|
}
|
||||||
|
tmp = p.Y.A0.Bytes()
|
||||||
|
for i := 0; i < 32; i++ {
|
||||||
|
b = append(b, tmp[i])
|
||||||
|
}
|
||||||
|
tmp = p.Y.A1.Bytes()
|
||||||
|
for i := 0; i < 32; i++ {
|
||||||
|
b = append(b, tmp[i])
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeserializeG2(b []byte) *bn254.G2Affine {
|
||||||
|
p := new(bn254.G2Affine)
|
||||||
|
p.X.A0.SetBytes(b[0:32])
|
||||||
|
p.X.A1.SetBytes(b[32:64])
|
||||||
|
p.Y.A0.SetBytes(b[64:96])
|
||||||
|
p.Y.A1.SetBytes(b[96:128])
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
func Gamma(hash *bn254.G1Affine, signature *bn254.G1Affine, pkG1 *bn254.G1Affine, pkG2 *bn254.G2Affine) *big.Int {
|
||||||
|
toHash := make([]byte, 0)
|
||||||
|
toHash = append(toHash, SerializeG1(hash)...)
|
||||||
|
toHash = append(toHash, SerializeG1(signature)...)
|
||||||
|
toHash = append(toHash, SerializeG1(pkG1)...)
|
||||||
|
toHash = append(toHash, SerializeG2(pkG2)...)
|
||||||
|
|
||||||
|
msgHash := crypto.Keccak256(toHash)
|
||||||
|
gamma := new(big.Int)
|
||||||
|
gamma.SetBytes(msgHash)
|
||||||
|
gamma.Mod(gamma, FR_MODULUS)
|
||||||
|
return gamma
|
||||||
|
}
|
58
crypto/vrf/algorithm.go
Normal file
58
crypto/vrf/algorithm.go
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
package vrf
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||||
|
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||||
|
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// SupportedAlgorithms defines the list of signing algorithms used on Evmos:
|
||||||
|
// - eth_secp256k1 (Ethereum)
|
||||||
|
// - secp256k1 (Tendermint)
|
||||||
|
SupportedAlgorithms = keyring.SigningAlgoList{VrfAlgo}
|
||||||
|
// SupportedAlgorithmsLedger defines the list of signing algorithms used on Evmos for the Ledger device:
|
||||||
|
// - eth_secp256k1 (Ethereum)
|
||||||
|
// - secp256k1 (Tendermint)
|
||||||
|
SupportedAlgorithmsLedger = keyring.SigningAlgoList{VrfAlgo}
|
||||||
|
)
|
||||||
|
|
||||||
|
func VrfOption() keyring.Option {
|
||||||
|
return func(options *keyring.Options) {
|
||||||
|
options.SupportedAlgos = SupportedAlgorithms
|
||||||
|
options.SupportedAlgosLedger = SupportedAlgorithmsLedger
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
VrfType = hd.PubKeyType(KeyType)
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
_ keyring.SignatureAlgo = VrfAlgo
|
||||||
|
VrfAlgo = vrfAlgo{}
|
||||||
|
)
|
||||||
|
|
||||||
|
type vrfAlgo struct{}
|
||||||
|
|
||||||
|
func (s vrfAlgo) Name() hd.PubKeyType {
|
||||||
|
return VrfType
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s vrfAlgo) Derive() hd.DeriveFn {
|
||||||
|
return func(mnemonic, bip39Passphrase, path string) ([]byte, error) {
|
||||||
|
key, err := GenerateKey()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return key.Bytes(), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s vrfAlgo) Generate() hd.GenerateFn {
|
||||||
|
return func(bz []byte) cryptotypes.PrivKey {
|
||||||
|
key, _ := GenerateKey()
|
||||||
|
return key
|
||||||
|
}
|
||||||
|
}
|
496
crypto/vrf/keys.pb.go
Normal file
496
crypto/vrf/keys.pb.go
Normal file
@ -0,0 +1,496 @@
|
|||||||
|
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
||||||
|
// source: crypto/vrf/keys.proto
|
||||||
|
|
||||||
|
package vrf
|
||||||
|
|
||||||
|
import (
|
||||||
|
fmt "fmt"
|
||||||
|
_ "github.com/cosmos/gogoproto/gogoproto"
|
||||||
|
proto "github.com/cosmos/gogoproto/proto"
|
||||||
|
io "io"
|
||||||
|
math "math"
|
||||||
|
math_bits "math/bits"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
|
var _ = proto.Marshal
|
||||||
|
var _ = fmt.Errorf
|
||||||
|
var _ = math.Inf
|
||||||
|
|
||||||
|
// This is a compile-time assertion to ensure that this generated file
|
||||||
|
// is compatible with the proto package it is being compiled against.
|
||||||
|
// A compilation error at this line likely means your copy of the
|
||||||
|
// proto package needs to be updated.
|
||||||
|
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
|
||||||
|
|
||||||
|
// PubKey defines a type alias for an vrf.PublicKey that implements
|
||||||
|
// Vrf's PubKey interface. It represents the 32-byte compressed public
|
||||||
|
// key format.
|
||||||
|
type PubKey struct {
|
||||||
|
// key is the public key in byte form
|
||||||
|
Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *PubKey) Reset() { *m = PubKey{} }
|
||||||
|
func (*PubKey) ProtoMessage() {}
|
||||||
|
func (*PubKey) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_eae59d1af27f5957, []int{0}
|
||||||
|
}
|
||||||
|
func (m *PubKey) XXX_Unmarshal(b []byte) error {
|
||||||
|
return m.Unmarshal(b)
|
||||||
|
}
|
||||||
|
func (m *PubKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
if deterministic {
|
||||||
|
return xxx_messageInfo_PubKey.Marshal(b, m, deterministic)
|
||||||
|
} else {
|
||||||
|
b = b[:cap(b)]
|
||||||
|
n, err := m.MarshalToSizedBuffer(b)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return b[:n], nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func (m *PubKey) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_PubKey.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *PubKey) XXX_Size() int {
|
||||||
|
return m.Size()
|
||||||
|
}
|
||||||
|
func (m *PubKey) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_PubKey.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_PubKey proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *PubKey) GetKey() []byte {
|
||||||
|
if m != nil {
|
||||||
|
return m.Key
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrivKey defines a type alias for an vrf.PrivateKey that implements
|
||||||
|
// Vrf's PrivateKey interface.
|
||||||
|
type PrivKey struct {
|
||||||
|
// key is the private key in byte form
|
||||||
|
Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *PrivKey) Reset() { *m = PrivKey{} }
|
||||||
|
func (m *PrivKey) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*PrivKey) ProtoMessage() {}
|
||||||
|
func (*PrivKey) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_eae59d1af27f5957, []int{1}
|
||||||
|
}
|
||||||
|
func (m *PrivKey) XXX_Unmarshal(b []byte) error {
|
||||||
|
return m.Unmarshal(b)
|
||||||
|
}
|
||||||
|
func (m *PrivKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
if deterministic {
|
||||||
|
return xxx_messageInfo_PrivKey.Marshal(b, m, deterministic)
|
||||||
|
} else {
|
||||||
|
b = b[:cap(b)]
|
||||||
|
n, err := m.MarshalToSizedBuffer(b)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return b[:n], nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func (m *PrivKey) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_PrivKey.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *PrivKey) XXX_Size() int {
|
||||||
|
return m.Size()
|
||||||
|
}
|
||||||
|
func (m *PrivKey) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_PrivKey.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_PrivKey proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *PrivKey) GetKey() []byte {
|
||||||
|
if m != nil {
|
||||||
|
return m.Key
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
proto.RegisterType((*PubKey)(nil), "crypto.vrf.PubKey")
|
||||||
|
proto.RegisterType((*PrivKey)(nil), "crypto.vrf.PrivKey")
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { proto.RegisterFile("crypto/vrf/keys.proto", fileDescriptor_eae59d1af27f5957) }
|
||||||
|
|
||||||
|
var fileDescriptor_eae59d1af27f5957 = []byte{
|
||||||
|
// 174 bytes of a gzipped FileDescriptorProto
|
||||||
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4d, 0x2e, 0xaa, 0x2c,
|
||||||
|
0x28, 0xc9, 0xd7, 0x2f, 0x2b, 0x4a, 0xd3, 0xcf, 0x4e, 0xad, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f,
|
||||||
|
0xc9, 0x17, 0xe2, 0x82, 0x08, 0xeb, 0x95, 0x15, 0xa5, 0x49, 0x89, 0xa4, 0xe7, 0xa7, 0xe7, 0x83,
|
||||||
|
0x85, 0xf5, 0x41, 0x2c, 0x88, 0x0a, 0x25, 0x05, 0x2e, 0xb6, 0x80, 0xd2, 0x24, 0xef, 0xd4, 0x4a,
|
||||||
|
0x21, 0x01, 0x2e, 0xe6, 0xec, 0xd4, 0x4a, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x9e, 0x20, 0x10, 0xd3,
|
||||||
|
0x8a, 0x65, 0xc6, 0x02, 0x79, 0x06, 0x25, 0x69, 0x2e, 0xf6, 0x80, 0xa2, 0xcc, 0x32, 0xac, 0x4a,
|
||||||
|
0x9c, 0xec, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09,
|
||||||
|
0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0x4a, 0x35, 0x3d, 0xb3,
|
||||||
|
0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0xdf, 0x20, 0x3d, 0x27, 0x31, 0xa9, 0x58, 0xdf,
|
||||||
|
0x20, 0x5d, 0x37, 0x39, 0x23, 0x31, 0x33, 0x4f, 0x1f, 0xe1, 0xd8, 0x24, 0x36, 0xb0, 0x33, 0x8c,
|
||||||
|
0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xdb, 0xb8, 0x32, 0x07, 0xc1, 0x00, 0x00, 0x00,
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *PubKey) Marshal() (dAtA []byte, err error) {
|
||||||
|
size := m.Size()
|
||||||
|
dAtA = make([]byte, size)
|
||||||
|
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return dAtA[:n], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *PubKey) MarshalTo(dAtA []byte) (int, error) {
|
||||||
|
size := m.Size()
|
||||||
|
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *PubKey) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||||
|
i := len(dAtA)
|
||||||
|
_ = i
|
||||||
|
var l int
|
||||||
|
_ = l
|
||||||
|
if len(m.Key) > 0 {
|
||||||
|
i -= len(m.Key)
|
||||||
|
copy(dAtA[i:], m.Key)
|
||||||
|
i = encodeVarintKeys(dAtA, i, uint64(len(m.Key)))
|
||||||
|
i--
|
||||||
|
dAtA[i] = 0xa
|
||||||
|
}
|
||||||
|
return len(dAtA) - i, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *PrivKey) Marshal() (dAtA []byte, err error) {
|
||||||
|
size := m.Size()
|
||||||
|
dAtA = make([]byte, size)
|
||||||
|
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return dAtA[:n], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *PrivKey) MarshalTo(dAtA []byte) (int, error) {
|
||||||
|
size := m.Size()
|
||||||
|
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *PrivKey) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||||
|
i := len(dAtA)
|
||||||
|
_ = i
|
||||||
|
var l int
|
||||||
|
_ = l
|
||||||
|
if len(m.Key) > 0 {
|
||||||
|
i -= len(m.Key)
|
||||||
|
copy(dAtA[i:], m.Key)
|
||||||
|
i = encodeVarintKeys(dAtA, i, uint64(len(m.Key)))
|
||||||
|
i--
|
||||||
|
dAtA[i] = 0xa
|
||||||
|
}
|
||||||
|
return len(dAtA) - i, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func encodeVarintKeys(dAtA []byte, offset int, v uint64) int {
|
||||||
|
offset -= sovKeys(v)
|
||||||
|
base := offset
|
||||||
|
for v >= 1<<7 {
|
||||||
|
dAtA[offset] = uint8(v&0x7f | 0x80)
|
||||||
|
v >>= 7
|
||||||
|
offset++
|
||||||
|
}
|
||||||
|
dAtA[offset] = uint8(v)
|
||||||
|
return base
|
||||||
|
}
|
||||||
|
func (m *PubKey) Size() (n int) {
|
||||||
|
if m == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
var l int
|
||||||
|
_ = l
|
||||||
|
l = len(m.Key)
|
||||||
|
if l > 0 {
|
||||||
|
n += 1 + l + sovKeys(uint64(l))
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *PrivKey) Size() (n int) {
|
||||||
|
if m == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
var l int
|
||||||
|
_ = l
|
||||||
|
l = len(m.Key)
|
||||||
|
if l > 0 {
|
||||||
|
n += 1 + l + sovKeys(uint64(l))
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
func sovKeys(x uint64) (n int) {
|
||||||
|
return (math_bits.Len64(x|1) + 6) / 7
|
||||||
|
}
|
||||||
|
func sozKeys(x uint64) (n int) {
|
||||||
|
return sovKeys(uint64((x << 1) ^ uint64((int64(x) >> 63))))
|
||||||
|
}
|
||||||
|
func (m *PubKey) Unmarshal(dAtA []byte) error {
|
||||||
|
l := len(dAtA)
|
||||||
|
iNdEx := 0
|
||||||
|
for iNdEx < l {
|
||||||
|
preIndex := iNdEx
|
||||||
|
var wire uint64
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowKeys
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
wire |= uint64(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fieldNum := int32(wire >> 3)
|
||||||
|
wireType := int(wire & 0x7)
|
||||||
|
if wireType == 4 {
|
||||||
|
return fmt.Errorf("proto: PubKey: wiretype end group for non-group")
|
||||||
|
}
|
||||||
|
if fieldNum <= 0 {
|
||||||
|
return fmt.Errorf("proto: PubKey: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||||
|
}
|
||||||
|
switch fieldNum {
|
||||||
|
case 1:
|
||||||
|
if wireType != 2 {
|
||||||
|
return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
|
||||||
|
}
|
||||||
|
var byteLen int
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowKeys
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
byteLen |= int(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if byteLen < 0 {
|
||||||
|
return ErrInvalidLengthKeys
|
||||||
|
}
|
||||||
|
postIndex := iNdEx + byteLen
|
||||||
|
if postIndex < 0 {
|
||||||
|
return ErrInvalidLengthKeys
|
||||||
|
}
|
||||||
|
if postIndex > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...)
|
||||||
|
if m.Key == nil {
|
||||||
|
m.Key = []byte{}
|
||||||
|
}
|
||||||
|
iNdEx = postIndex
|
||||||
|
default:
|
||||||
|
iNdEx = preIndex
|
||||||
|
skippy, err := skipKeys(dAtA[iNdEx:])
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||||
|
return ErrInvalidLengthKeys
|
||||||
|
}
|
||||||
|
if (iNdEx + skippy) > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
iNdEx += skippy
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if iNdEx > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (m *PrivKey) Unmarshal(dAtA []byte) error {
|
||||||
|
l := len(dAtA)
|
||||||
|
iNdEx := 0
|
||||||
|
for iNdEx < l {
|
||||||
|
preIndex := iNdEx
|
||||||
|
var wire uint64
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowKeys
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
wire |= uint64(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fieldNum := int32(wire >> 3)
|
||||||
|
wireType := int(wire & 0x7)
|
||||||
|
if wireType == 4 {
|
||||||
|
return fmt.Errorf("proto: PrivKey: wiretype end group for non-group")
|
||||||
|
}
|
||||||
|
if fieldNum <= 0 {
|
||||||
|
return fmt.Errorf("proto: PrivKey: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||||
|
}
|
||||||
|
switch fieldNum {
|
||||||
|
case 1:
|
||||||
|
if wireType != 2 {
|
||||||
|
return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
|
||||||
|
}
|
||||||
|
var byteLen int
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowKeys
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
byteLen |= int(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if byteLen < 0 {
|
||||||
|
return ErrInvalidLengthKeys
|
||||||
|
}
|
||||||
|
postIndex := iNdEx + byteLen
|
||||||
|
if postIndex < 0 {
|
||||||
|
return ErrInvalidLengthKeys
|
||||||
|
}
|
||||||
|
if postIndex > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...)
|
||||||
|
if m.Key == nil {
|
||||||
|
m.Key = []byte{}
|
||||||
|
}
|
||||||
|
iNdEx = postIndex
|
||||||
|
default:
|
||||||
|
iNdEx = preIndex
|
||||||
|
skippy, err := skipKeys(dAtA[iNdEx:])
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||||
|
return ErrInvalidLengthKeys
|
||||||
|
}
|
||||||
|
if (iNdEx + skippy) > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
iNdEx += skippy
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if iNdEx > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func skipKeys(dAtA []byte) (n int, err error) {
|
||||||
|
l := len(dAtA)
|
||||||
|
iNdEx := 0
|
||||||
|
depth := 0
|
||||||
|
for iNdEx < l {
|
||||||
|
var wire uint64
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return 0, ErrIntOverflowKeys
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return 0, io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
wire |= (uint64(b) & 0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wireType := int(wire & 0x7)
|
||||||
|
switch wireType {
|
||||||
|
case 0:
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return 0, ErrIntOverflowKeys
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return 0, io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
iNdEx++
|
||||||
|
if dAtA[iNdEx-1] < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
|
iNdEx += 8
|
||||||
|
case 2:
|
||||||
|
var length int
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return 0, ErrIntOverflowKeys
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return 0, io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
length |= (int(b) & 0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if length < 0 {
|
||||||
|
return 0, ErrInvalidLengthKeys
|
||||||
|
}
|
||||||
|
iNdEx += length
|
||||||
|
case 3:
|
||||||
|
depth++
|
||||||
|
case 4:
|
||||||
|
if depth == 0 {
|
||||||
|
return 0, ErrUnexpectedEndOfGroupKeys
|
||||||
|
}
|
||||||
|
depth--
|
||||||
|
case 5:
|
||||||
|
iNdEx += 4
|
||||||
|
default:
|
||||||
|
return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
|
||||||
|
}
|
||||||
|
if iNdEx < 0 {
|
||||||
|
return 0, ErrInvalidLengthKeys
|
||||||
|
}
|
||||||
|
if depth == 0 {
|
||||||
|
return iNdEx, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0, io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
ErrInvalidLengthKeys = fmt.Errorf("proto: negative length found during unmarshaling")
|
||||||
|
ErrIntOverflowKeys = fmt.Errorf("proto: integer overflow")
|
||||||
|
ErrUnexpectedEndOfGroupKeys = fmt.Errorf("proto: unexpected end of group")
|
||||||
|
)
|
194
crypto/vrf/vrf.go
Normal file
194
crypto/vrf/vrf.go
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
package vrf
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"crypto/subtle"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
errorsmod "cosmossdk.io/errors"
|
||||||
|
tmcrypto "github.com/cometbft/cometbft/crypto"
|
||||||
|
vrfalgo "github.com/coniks-sys/coniks-go/crypto/vrf"
|
||||||
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
|
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||||
|
errortypes "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// PrivKeySize defines the size of the PrivKey bytes
|
||||||
|
PrivKeySize = 64
|
||||||
|
// PubKeySize defines the size of the PubKey bytes
|
||||||
|
PubKeySize = 32
|
||||||
|
// KeyType is the string constant for the vrf algorithm
|
||||||
|
KeyType = "vrf"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Amino encoding names
|
||||||
|
const (
|
||||||
|
// PrivKeyName defines the amino encoding name for the vrf private key
|
||||||
|
PrivKeyName = "vrf/PrivKey"
|
||||||
|
// PubKeyName defines the amino encoding name for the vrf public key
|
||||||
|
PubKeyName = "vrf/PubKey"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// vrf Private Key
|
||||||
|
|
||||||
|
var (
|
||||||
|
_ cryptotypes.PrivKey = &PrivKey{}
|
||||||
|
_ codec.AminoMarshaler = &PrivKey{}
|
||||||
|
)
|
||||||
|
|
||||||
|
// GenerateKey generates a new random private key. It returns an error upon
|
||||||
|
// failure.
|
||||||
|
func GenerateKey() (*PrivKey, error) {
|
||||||
|
priv, err := vrfalgo.GenerateKey(nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &PrivKey{
|
||||||
|
Key: priv,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (privKey PrivKey) getVrfPrivateKey() vrfalgo.PrivateKey {
|
||||||
|
return vrfalgo.PrivateKey(privKey.Key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bytes returns the byte representation of the Private Key.
|
||||||
|
func (privKey PrivKey) Bytes() []byte {
|
||||||
|
bz := make([]byte, len(privKey.Key))
|
||||||
|
copy(bz, privKey.Key)
|
||||||
|
|
||||||
|
return bz
|
||||||
|
}
|
||||||
|
|
||||||
|
// PubKey returns the private key's public key. If the privkey is not valid
|
||||||
|
// it returns a nil value.
|
||||||
|
func (privKey PrivKey) PubKey() cryptotypes.PubKey {
|
||||||
|
pk, _ := vrfalgo.PrivateKey(privKey.Key).Public()
|
||||||
|
|
||||||
|
return &PubKey{
|
||||||
|
Key: pk,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Equals returns true if two private keys are equal and false otherwise.
|
||||||
|
func (privKey PrivKey) Equals(other cryptotypes.LedgerPrivKey) bool {
|
||||||
|
return privKey.Type() == other.Type() && subtle.ConstantTimeCompare(privKey.Bytes(), other.Bytes()) == 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type returns vrf
|
||||||
|
func (privKey PrivKey) Type() string {
|
||||||
|
return KeyType
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compute generates the vrf value for the byte slice m using the
|
||||||
|
// underlying private key sk.
|
||||||
|
func (privKey PrivKey) Sign(digestBz []byte) ([]byte, error) {
|
||||||
|
sk := privKey.getVrfPrivateKey()
|
||||||
|
|
||||||
|
return sk.Compute(digestBz), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalAmino overrides Amino binary marshaling.
|
||||||
|
func (privKey PrivKey) MarshalAmino() ([]byte, error) {
|
||||||
|
return privKey.Key, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalAmino overrides Amino binary marshaling.
|
||||||
|
func (privKey *PrivKey) UnmarshalAmino(bz []byte) error {
|
||||||
|
if len(bz) != PrivKeySize {
|
||||||
|
return fmt.Errorf("invalid privkey size, expected %d got %d", PrivKeySize, len(bz))
|
||||||
|
}
|
||||||
|
privKey.Key = bz
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalAminoJSON overrides Amino JSON marshaling.
|
||||||
|
func (privKey PrivKey) MarshalAminoJSON() ([]byte, error) {
|
||||||
|
// When we marshal to Amino JSON, we don't marshal the "key" field itself,
|
||||||
|
// just its contents (i.e. the key bytes).
|
||||||
|
return privKey.MarshalAmino()
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalAminoJSON overrides Amino JSON marshaling.
|
||||||
|
func (privKey *PrivKey) UnmarshalAminoJSON(bz []byte) error {
|
||||||
|
return privKey.UnmarshalAmino(bz)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// vrf Public Key
|
||||||
|
|
||||||
|
var (
|
||||||
|
_ cryptotypes.PubKey = &PubKey{}
|
||||||
|
_ codec.AminoMarshaler = &PubKey{}
|
||||||
|
)
|
||||||
|
|
||||||
|
// func (pubKey PubKey) getVrfPublicKey() vrfalgo.PublicKey {
|
||||||
|
// return vrfalgo.PublicKey(pubKey.Key)
|
||||||
|
// }
|
||||||
|
|
||||||
|
// Address returns the address of the ECDSA public key.
|
||||||
|
// The function will return an empty address if the public key is invalid.
|
||||||
|
func (pubKey PubKey) Address() tmcrypto.Address {
|
||||||
|
return tmcrypto.Address(common.BytesToAddress(pubKey.Key).Bytes())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bytes returns the raw bytes of the ECDSA public key.
|
||||||
|
func (pubKey PubKey) Bytes() []byte {
|
||||||
|
bz := make([]byte, len(pubKey.Key))
|
||||||
|
copy(bz, pubKey.Key)
|
||||||
|
|
||||||
|
return bz
|
||||||
|
}
|
||||||
|
|
||||||
|
// String implements the fmt.Stringer interface.
|
||||||
|
func (pubKey PubKey) String() string {
|
||||||
|
return fmt.Sprintf("vrf{%X}", pubKey.Key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type returns vrf
|
||||||
|
func (pubKey PubKey) Type() string {
|
||||||
|
return KeyType
|
||||||
|
}
|
||||||
|
|
||||||
|
// Equals returns true if the pubkey type is the same and their bytes are deeply equal.
|
||||||
|
func (pubKey PubKey) Equals(other cryptotypes.PubKey) bool {
|
||||||
|
return pubKey.Type() == other.Type() && bytes.Equal(pubKey.Bytes(), other.Bytes())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify returns true iff vrf=Compute(m) for the sk that
|
||||||
|
// corresponds to pk.
|
||||||
|
func (pubKey PubKey) VerifySignature(msg, sig []byte) bool {
|
||||||
|
panic("not implement")
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalAmino overrides Amino binary marshaling.
|
||||||
|
func (pubKey PubKey) MarshalAmino() ([]byte, error) {
|
||||||
|
return pubKey.Key, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalAmino overrides Amino binary marshaling.
|
||||||
|
func (pubKey *PubKey) UnmarshalAmino(bz []byte) error {
|
||||||
|
if len(bz) != PubKeySize {
|
||||||
|
return errorsmod.Wrapf(errortypes.ErrInvalidPubKey, "invalid pubkey size, expected %d, got %d", PubKeySize, len(bz))
|
||||||
|
}
|
||||||
|
pubKey.Key = bz
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalAminoJSON overrides Amino JSON marshaling.
|
||||||
|
func (pubKey PubKey) MarshalAminoJSON() ([]byte, error) {
|
||||||
|
// When we marshal to Amino JSON, we don't marshal the "key" field itself,
|
||||||
|
// just its contents (i.e. the key bytes).
|
||||||
|
return pubKey.MarshalAmino()
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalAminoJSON overrides Amino JSON marshaling.
|
||||||
|
func (pubKey *PubKey) UnmarshalAminoJSON(bz []byte) error {
|
||||||
|
return pubKey.UnmarshalAmino(bz)
|
||||||
|
}
|
96
crypto/vrf/vrf_test.go
Normal file
96
crypto/vrf/vrf_test.go
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
package vrf
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||||
|
|
||||||
|
"encoding/base64"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestPrivKey(t *testing.T) {
|
||||||
|
// validate type and equality
|
||||||
|
privKey, err := GenerateKey()
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Implements(t, (*cryptotypes.PrivKey)(nil), privKey)
|
||||||
|
|
||||||
|
// validate inequality
|
||||||
|
privKey2, err := GenerateKey()
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.False(t, privKey.Equals(privKey2))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPrivKey_PubKey(t *testing.T) {
|
||||||
|
privKey, err := GenerateKey()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// validate type and equality
|
||||||
|
pubKey := &PubKey{
|
||||||
|
Key: privKey.PubKey().Bytes(),
|
||||||
|
}
|
||||||
|
require.Implements(t, (*cryptotypes.PubKey)(nil), pubKey)
|
||||||
|
|
||||||
|
// validate inequality
|
||||||
|
privKey2, err := GenerateKey()
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.False(t, pubKey.Equals(privKey2.PubKey()))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMarshalAmino(t *testing.T) {
|
||||||
|
aminoCdc := codec.NewLegacyAmino()
|
||||||
|
privKey, err := GenerateKey()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
pubKey := privKey.PubKey().(*PubKey)
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
desc string
|
||||||
|
msg codec.AminoMarshaler
|
||||||
|
typ interface{}
|
||||||
|
expBinary []byte
|
||||||
|
expJSON string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"vrf private key",
|
||||||
|
privKey,
|
||||||
|
&PrivKey{},
|
||||||
|
append([]byte{64}, privKey.Bytes()...), // Length-prefixed.
|
||||||
|
"\"" + base64.StdEncoding.EncodeToString(privKey.Bytes()) + "\"",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"vrf public key",
|
||||||
|
pubKey,
|
||||||
|
&PubKey{},
|
||||||
|
append([]byte{32}, pubKey.Bytes()...), // Length-prefixed.
|
||||||
|
"\"" + base64.StdEncoding.EncodeToString(pubKey.Bytes()) + "\"",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.desc, func(t *testing.T) {
|
||||||
|
// Do a round trip of encoding/decoding binary.
|
||||||
|
bz, err := aminoCdc.Marshal(tc.msg)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, tc.expBinary, bz)
|
||||||
|
|
||||||
|
err = aminoCdc.Unmarshal(bz, tc.typ)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Equal(t, tc.msg, tc.typ)
|
||||||
|
|
||||||
|
// Do a round trip of encoding/decoding JSON.
|
||||||
|
bz, err = aminoCdc.MarshalJSON(tc.msg)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, tc.expJSON, string(bz))
|
||||||
|
|
||||||
|
err = aminoCdc.UnmarshalJSON(bz, tc.typ)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Equal(t, tc.msg, tc.typ)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@ -3,7 +3,7 @@ version: '3'
|
|||||||
services:
|
services:
|
||||||
kvdnode0:
|
kvdnode0:
|
||||||
container_name: kvdnode0
|
container_name: kvdnode0
|
||||||
image: "kava/kavanode"
|
image: "0glabs/0g-chain-node"
|
||||||
ports:
|
ports:
|
||||||
- "26656-26657:26656-26657"
|
- "26656-26657:26656-26657"
|
||||||
environment:
|
environment:
|
||||||
@ -17,7 +17,7 @@ services:
|
|||||||
|
|
||||||
kvdnode1:
|
kvdnode1:
|
||||||
container_name: kvdnode1
|
container_name: kvdnode1
|
||||||
image: "kava/kavanode"
|
image: "0glabs/0g-chain-node"
|
||||||
ports:
|
ports:
|
||||||
- "26659-26660:26656-26657"
|
- "26659-26660:26656-26657"
|
||||||
environment:
|
environment:
|
||||||
@ -31,7 +31,7 @@ services:
|
|||||||
|
|
||||||
kvdnode2:
|
kvdnode2:
|
||||||
container_name: kvdnode2
|
container_name: kvdnode2
|
||||||
image: "kava/kavanode"
|
image: "0glabs/0g-chain-node"
|
||||||
environment:
|
environment:
|
||||||
- ID=2
|
- ID=2
|
||||||
- LOG=${LOG:-kvd.log}
|
- LOG=${LOG:-kvd.log}
|
||||||
@ -45,7 +45,7 @@ services:
|
|||||||
|
|
||||||
kvdnode3:
|
kvdnode3:
|
||||||
container_name: kvdnode3
|
container_name: kvdnode3
|
||||||
image: "kava/kavanode"
|
image: "0glabs/0g-chain-node"
|
||||||
environment:
|
environment:
|
||||||
- ID=3
|
- ID=3
|
||||||
- LOG=${LOG:-kvd.log}
|
- LOG=${LOG:-kvd.log}
|
||||||
|
23
go.mod
23
go.mod
@ -1,14 +1,17 @@
|
|||||||
module github.com/kava-labs/kava
|
module github.com/0glabs/0g-chain
|
||||||
|
|
||||||
go 1.21
|
go 1.21
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
cosmossdk.io/api v0.3.1
|
||||||
cosmossdk.io/errors v1.0.1
|
cosmossdk.io/errors v1.0.1
|
||||||
cosmossdk.io/math v1.3.0
|
cosmossdk.io/math v1.3.0
|
||||||
cosmossdk.io/simapp v0.0.0-20231127212628-044ff4d8c015
|
cosmossdk.io/simapp v0.0.0-20231127212628-044ff4d8c015
|
||||||
github.com/cenkalti/backoff/v4 v4.1.3
|
github.com/cenkalti/backoff/v4 v4.1.3
|
||||||
github.com/cometbft/cometbft v0.37.4
|
github.com/cometbft/cometbft v0.37.4
|
||||||
github.com/cometbft/cometbft-db v0.9.1
|
github.com/cometbft/cometbft-db v0.9.1
|
||||||
|
github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71
|
||||||
|
github.com/consensys/gnark-crypto v0.12.1
|
||||||
github.com/cosmos/cosmos-proto v1.0.0-beta.4
|
github.com/cosmos/cosmos-proto v1.0.0-beta.4
|
||||||
github.com/cosmos/cosmos-sdk v0.47.10
|
github.com/cosmos/cosmos-sdk v0.47.10
|
||||||
github.com/cosmos/go-bip39 v1.0.0
|
github.com/cosmos/go-bip39 v1.0.0
|
||||||
@ -19,18 +22,19 @@ require (
|
|||||||
github.com/ethereum/go-ethereum v1.10.26
|
github.com/ethereum/go-ethereum v1.10.26
|
||||||
github.com/evmos/ethermint v0.21.0
|
github.com/evmos/ethermint v0.21.0
|
||||||
github.com/go-kit/kit v0.12.0
|
github.com/go-kit/kit v0.12.0
|
||||||
github.com/gogo/protobuf v1.3.2
|
|
||||||
github.com/golang/protobuf v1.5.3
|
github.com/golang/protobuf v1.5.3
|
||||||
github.com/gorilla/mux v1.8.0
|
github.com/gorilla/mux v1.8.0
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0
|
github.com/grpc-ecosystem/grpc-gateway v1.16.0
|
||||||
github.com/linxGnu/grocksdb v1.8.6
|
github.com/linxGnu/grocksdb v1.8.6
|
||||||
github.com/pelletier/go-toml/v2 v2.0.8
|
github.com/pelletier/go-toml/v2 v2.0.8
|
||||||
github.com/prometheus/client_golang v1.14.0
|
github.com/prometheus/client_golang v1.14.0
|
||||||
|
github.com/shopspring/decimal v1.4.0
|
||||||
github.com/spf13/cast v1.5.1
|
github.com/spf13/cast v1.5.1
|
||||||
github.com/spf13/cobra v1.7.0
|
github.com/spf13/cobra v1.7.0
|
||||||
github.com/spf13/viper v1.16.0
|
github.com/spf13/viper v1.16.0
|
||||||
github.com/stretchr/testify v1.8.4
|
github.com/stretchr/testify v1.8.4
|
||||||
github.com/subosito/gotenv v1.4.2
|
github.com/subosito/gotenv v1.4.2
|
||||||
|
github.com/tendermint/tm-db v0.6.7
|
||||||
golang.org/x/crypto v0.16.0
|
golang.org/x/crypto v0.16.0
|
||||||
golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb
|
golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0
|
google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0
|
||||||
@ -45,7 +49,6 @@ require (
|
|||||||
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
||||||
cloud.google.com/go/iam v1.1.5 // indirect
|
cloud.google.com/go/iam v1.1.5 // indirect
|
||||||
cloud.google.com/go/storage v1.30.1 // indirect
|
cloud.google.com/go/storage v1.30.1 // indirect
|
||||||
cosmossdk.io/api v0.3.1 // indirect
|
|
||||||
cosmossdk.io/core v0.6.1 // indirect
|
cosmossdk.io/core v0.6.1 // indirect
|
||||||
cosmossdk.io/depinject v1.0.0-alpha.4 // indirect
|
cosmossdk.io/depinject v1.0.0-alpha.4 // indirect
|
||||||
cosmossdk.io/log v1.3.1 // indirect
|
cosmossdk.io/log v1.3.1 // indirect
|
||||||
@ -62,6 +65,7 @@ require (
|
|||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
|
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
|
||||||
github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect
|
github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect
|
||||||
|
github.com/bits-and-blooms/bitset v1.7.0 // indirect
|
||||||
github.com/btcsuite/btcd v0.23.4 // indirect
|
github.com/btcsuite/btcd v0.23.4 // indirect
|
||||||
github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect
|
github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect
|
||||||
github.com/btcsuite/btcd/btcutil v1.1.3 // indirect
|
github.com/btcsuite/btcd/btcutil v1.1.3 // indirect
|
||||||
@ -75,8 +79,10 @@ require (
|
|||||||
github.com/cockroachdb/redact v1.1.5 // indirect
|
github.com/cockroachdb/redact v1.1.5 // indirect
|
||||||
github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect
|
github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect
|
||||||
github.com/confio/ics23/go v0.9.0 // indirect
|
github.com/confio/ics23/go v0.9.0 // indirect
|
||||||
|
github.com/consensys/bavard v0.1.13 // indirect
|
||||||
github.com/cosmos/btcutil v1.0.5 // indirect
|
github.com/cosmos/btcutil v1.0.5 // indirect
|
||||||
github.com/cosmos/gogogateway v1.2.0 // indirect
|
github.com/cosmos/gogogateway v1.2.0 // indirect
|
||||||
|
github.com/cosmos/gorocksdb v1.2.0 // indirect
|
||||||
github.com/cosmos/ics23/go v0.10.0 // indirect
|
github.com/cosmos/ics23/go v0.10.0 // indirect
|
||||||
github.com/cosmos/ledger-cosmos-go v0.13.1 // indirect
|
github.com/cosmos/ledger-cosmos-go v0.13.1 // indirect
|
||||||
github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect
|
github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect
|
||||||
@ -107,6 +113,7 @@ require (
|
|||||||
github.com/go-stack/stack v1.8.1 // indirect
|
github.com/go-stack/stack v1.8.1 // indirect
|
||||||
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
|
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
|
||||||
github.com/gogo/googleapis v1.4.1 // indirect
|
github.com/gogo/googleapis v1.4.1 // indirect
|
||||||
|
github.com/gogo/protobuf v1.3.2 // indirect
|
||||||
github.com/golang/glog v1.1.2 // indirect
|
github.com/golang/glog v1.1.2 // indirect
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
github.com/golang/mock v1.6.0 // indirect
|
github.com/golang/mock v1.6.0 // indirect
|
||||||
@ -158,6 +165,7 @@ require (
|
|||||||
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||||
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
|
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
|
||||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||||
|
github.com/mmcloughlin/addchain v0.4.0 // indirect
|
||||||
github.com/mtibben/percent v0.2.1 // indirect
|
github.com/mtibben/percent v0.2.1 // indirect
|
||||||
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
||||||
github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect
|
github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect
|
||||||
@ -179,7 +187,6 @@ require (
|
|||||||
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/spf13/pflag v1.0.5 // indirect
|
||||||
github.com/status-im/keycard-go v0.2.0 // indirect
|
github.com/status-im/keycard-go v0.2.0 // indirect
|
||||||
github.com/stretchr/objx v0.5.0 // indirect
|
|
||||||
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
|
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
|
||||||
github.com/tendermint/go-amino v0.16.0 // indirect
|
github.com/tendermint/go-amino v0.16.0 // indirect
|
||||||
github.com/tidwall/btree v1.6.0 // indirect
|
github.com/tidwall/btree v1.6.0 // indirect
|
||||||
@ -205,10 +212,12 @@ require (
|
|||||||
google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917 // indirect
|
google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1 // indirect
|
||||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
||||||
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect
|
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
nhooyr.io/websocket v1.8.6 // indirect
|
nhooyr.io/websocket v1.8.6 // indirect
|
||||||
pgregory.net/rapid v1.1.0 // indirect
|
pgregory.net/rapid v1.1.0 // indirect
|
||||||
|
rsc.io/tmplfunc v0.0.3 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
replace (
|
replace (
|
||||||
@ -218,11 +227,13 @@ replace (
|
|||||||
github.com/cometbft/cometbft => github.com/kava-labs/cometbft v0.37.4-kava.1
|
github.com/cometbft/cometbft => github.com/kava-labs/cometbft v0.37.4-kava.1
|
||||||
github.com/cometbft/cometbft-db => github.com/kava-labs/cometbft-db v0.9.1-kava.1
|
github.com/cometbft/cometbft-db => github.com/kava-labs/cometbft-db v0.9.1-kava.1
|
||||||
// Use cosmos-sdk fork with backported fix for unsafe-reset-all, staking transfer events, and custom tally handler support
|
// Use cosmos-sdk fork with backported fix for unsafe-reset-all, staking transfer events, and custom tally handler support
|
||||||
github.com/cosmos/cosmos-sdk => github.com/kava-labs/cosmos-sdk v0.47.10-kava.1
|
github.com/cosmos/cosmos-sdk => github.com/0glabs/cosmos-sdk v0.47.10-0glabs.2
|
||||||
// See https://github.com/cosmos/cosmos-sdk/pull/13093
|
// See https://github.com/cosmos/cosmos-sdk/pull/13093
|
||||||
github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt/v4 v4.4.2
|
github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt/v4 v4.4.2
|
||||||
|
// Use go-ethereum fork with precompiles
|
||||||
|
github.com/ethereum/go-ethereum => github.com/evmos/go-ethereum v1.10.26-evmos-rc2
|
||||||
// Use ethermint fork that respects min-gas-price with NoBaseFee true and london enabled, and includes eip712 support
|
// Use ethermint fork that respects min-gas-price with NoBaseFee true and london enabled, and includes eip712 support
|
||||||
github.com/evmos/ethermint => github.com/kava-labs/ethermint v0.21.0-kava-v26.2
|
github.com/evmos/ethermint => github.com/0glabs/ethermint v0.21.0-0g.v3.0.2
|
||||||
// See https://github.com/cosmos/cosmos-sdk/pull/10401, https://github.com/cosmos/cosmos-sdk/commit/0592ba6158cd0bf49d894be1cef4faeec59e8320
|
// See https://github.com/cosmos/cosmos-sdk/pull/10401, https://github.com/cosmos/cosmos-sdk/commit/0592ba6158cd0bf49d894be1cef4faeec59e8320
|
||||||
github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.0
|
github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.0
|
||||||
// Downgraded to avoid bugs in following commits which causes "version does not exist" errors
|
// Downgraded to avoid bugs in following commits which causes "version does not exist" errors
|
||||||
|
66
go.sum
66
go.sum
@ -212,6 +212,10 @@ filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek=
|
|||||||
filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
|
filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
|
||||||
git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw=
|
git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw=
|
||||||
git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA=
|
git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA=
|
||||||
|
github.com/0glabs/cosmos-sdk v0.47.10-0glabs.2 h1:/GpumFCz2d+chwlCc8gARhIM7NTYiuV4GlUwf8MWUKs=
|
||||||
|
github.com/0glabs/cosmos-sdk v0.47.10-0glabs.2/go.mod h1:BWo24B8cApWcO2/widWYIdt3CPxbh+HCSypCPpjTjog=
|
||||||
|
github.com/0glabs/ethermint v0.21.0-0g.v3.0.2 h1:4YI5wzzRdAvZ27PMLityxooICEE1bkG+7HgNQUm6JyM=
|
||||||
|
github.com/0glabs/ethermint v0.21.0-0g.v3.0.2/go.mod h1:HYQUhvcZBIG71H3xlxQSk0XyQEjeaHsduOj6O2QImrE=
|
||||||
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs=
|
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs=
|
||||||
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4=
|
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4=
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM=
|
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM=
|
||||||
@ -220,6 +224,7 @@ github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ
|
|||||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
|
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
|
||||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
|
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
|
github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||||
github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM=
|
github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM=
|
||||||
github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4=
|
github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4=
|
||||||
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
|
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
|
||||||
@ -291,6 +296,8 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ
|
|||||||
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
||||||
github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s=
|
github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s=
|
||||||
github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
||||||
|
github.com/bits-and-blooms/bitset v1.7.0 h1:YjAGVd3XmtK9ktAbX8Zg2g2PwLIMjGREZJHlV4j7NEo=
|
||||||
|
github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
|
||||||
github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c=
|
github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c=
|
||||||
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
|
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
|
||||||
github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8=
|
github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8=
|
||||||
@ -302,8 +309,8 @@ github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZg
|
|||||||
github.com/btcsuite/btcd v0.23.4 h1:IzV6qqkfwbItOS/sg/aDfPDsjPP8twrCOE2R93hxMlQ=
|
github.com/btcsuite/btcd v0.23.4 h1:IzV6qqkfwbItOS/sg/aDfPDsjPP8twrCOE2R93hxMlQ=
|
||||||
github.com/btcsuite/btcd v0.23.4/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY=
|
github.com/btcsuite/btcd v0.23.4/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY=
|
||||||
github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA=
|
github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA=
|
||||||
github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE=
|
|
||||||
github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE=
|
github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE=
|
||||||
|
github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=
|
||||||
github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U=
|
github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U=
|
||||||
github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=
|
github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=
|
||||||
github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A=
|
github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A=
|
||||||
@ -388,10 +395,16 @@ github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZ
|
|||||||
github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M=
|
github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M=
|
||||||
github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4=
|
github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4=
|
||||||
github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak=
|
github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak=
|
||||||
|
github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71 h1:MFLTqgfJclmtaQ1SRUrWwmDX/1UBok3XWUethkJ2swQ=
|
||||||
|
github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71/go.mod h1:TrHYHH4Wze7v7Hkwu1MH1W+mCPQKM+gs+PicdEV14o8=
|
||||||
github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ=
|
github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ=
|
||||||
github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
|
github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
|
||||||
|
github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ=
|
||||||
|
github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
|
||||||
github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q=
|
github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q=
|
||||||
github.com/consensys/gnark-crypto v0.5.3/go.mod h1:hOdPlWQV1gDLp7faZVeg8Y0iEPFaOUnCc4XeCCk96p0=
|
github.com/consensys/gnark-crypto v0.5.3/go.mod h1:hOdPlWQV1gDLp7faZVeg8Y0iEPFaOUnCc4XeCCk96p0=
|
||||||
|
github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M=
|
||||||
|
github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY=
|
||||||
github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg=
|
github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg=
|
||||||
github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM=
|
github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM=
|
||||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||||
@ -412,6 +425,8 @@ github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ
|
|||||||
github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU=
|
github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU=
|
||||||
github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI=
|
github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI=
|
||||||
github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek=
|
github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek=
|
||||||
|
github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y=
|
||||||
|
github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw=
|
||||||
github.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg=
|
github.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg=
|
||||||
github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A=
|
github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A=
|
||||||
github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3 h1:MZGDMETv72suFpTAD6VPGqSIm1FJcChtk2HmVh9D+Bo=
|
github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3 h1:MZGDMETv72suFpTAD6VPGqSIm1FJcChtk2HmVh9D+Bo=
|
||||||
@ -470,12 +485,11 @@ github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 h1:Izz0+t1Z5nI16
|
|||||||
github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
|
github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
|
||||||
github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko=
|
github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko=
|
||||||
github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
|
github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
|
||||||
github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v1.6.2/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
|
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
|
||||||
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
|
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
|
||||||
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
|
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
|
||||||
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||||
github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk=
|
|
||||||
github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf h1:Yt+4K30SdjOkRoRRm3vYNQgR+/ZIy0RmeUDZo7Y8zeQ=
|
github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf h1:Yt+4K30SdjOkRoRRm3vYNQgR+/ZIy0RmeUDZo7Y8zeQ=
|
||||||
github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk=
|
github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk=
|
||||||
github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y=
|
github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y=
|
||||||
@ -502,14 +516,20 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m
|
|||||||
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
|
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
|
||||||
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
|
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0=
|
github.com/evmos/go-ethereum v1.10.26-evmos-rc2 h1:tYghk1ZZ8X4/OQ4YI9hvtm8aSN8OSqO0g9vo/sCMdBo=
|
||||||
github.com/ethereum/go-ethereum v1.10.26 h1:i/7d9RBBwiXCEuyduBQzJw/mKmnvzsN14jqBmytw72s=
|
github.com/evmos/go-ethereum v1.10.26-evmos-rc2/go.mod h1:/6CsT5Ceen2WPLI/oCA3xMcZ5sWMF/D46SjM/ayY0Oo=
|
||||||
github.com/ethereum/go-ethereum v1.10.26/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg=
|
github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0=
|
||||||
|
github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64=
|
||||||
|
github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A=
|
||||||
|
github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg=
|
||||||
|
github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk=
|
||||||
|
github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0=
|
||||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||||
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
||||||
github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||||
github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o=
|
github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o=
|
||||||
github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||||
|
github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY=
|
||||||
github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c=
|
github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c=
|
||||||
github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0=
|
github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0=
|
||||||
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
||||||
@ -523,6 +543,7 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo
|
|||||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||||
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
|
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
|
||||||
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
|
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
|
||||||
|
github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILDlzrGEckF6HKjXe48EgsY/l7K7vhY4MW8=
|
||||||
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI=
|
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI=
|
||||||
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww=
|
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww=
|
||||||
github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4=
|
github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4=
|
||||||
@ -704,6 +725,7 @@ github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLe
|
|||||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||||
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
|
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
|
||||||
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
|
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
|
||||||
|
github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
|
||||||
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
@ -810,7 +832,6 @@ github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0Jr
|
|||||||
github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw=
|
github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw=
|
||||||
github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w=
|
github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w=
|
||||||
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
|
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
|
||||||
github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y=
|
|
||||||
github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ=
|
github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ=
|
||||||
github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y=
|
github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y=
|
||||||
github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o=
|
github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o=
|
||||||
@ -872,10 +893,6 @@ github.com/kava-labs/cometbft v0.37.4-kava.1 h1:QRuyBieWdUBpe4pcXgzu1SdMH2lkTaqX
|
|||||||
github.com/kava-labs/cometbft v0.37.4-kava.1/go.mod h1:Cmg5Hp4sNpapm7j+x0xRyt2g0juQfmB752ous+pA0G8=
|
github.com/kava-labs/cometbft v0.37.4-kava.1/go.mod h1:Cmg5Hp4sNpapm7j+x0xRyt2g0juQfmB752ous+pA0G8=
|
||||||
github.com/kava-labs/cometbft-db v0.9.1-kava.1 h1:0KmSPdXYdRp6TsgKuMxRnMZCMEGC5ysIVjuJddYr4tw=
|
github.com/kava-labs/cometbft-db v0.9.1-kava.1 h1:0KmSPdXYdRp6TsgKuMxRnMZCMEGC5ysIVjuJddYr4tw=
|
||||||
github.com/kava-labs/cometbft-db v0.9.1-kava.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U=
|
github.com/kava-labs/cometbft-db v0.9.1-kava.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U=
|
||||||
github.com/kava-labs/cosmos-sdk v0.47.10-kava.1 h1:Ycu9ep1ggcgltYNLPrwQhHd32zFjN4z1TSCvexipKM0=
|
|
||||||
github.com/kava-labs/cosmos-sdk v0.47.10-kava.1/go.mod h1:Pu1s91xgfT6VAUmwqR5wMensfvpGPHXKwA8dXw42+gA=
|
|
||||||
github.com/kava-labs/ethermint v0.21.0-kava-v26.2 h1:TPCwtVkYyyw4RRYkmfLk3WIZRNx1p1FPTCqAxBjPptY=
|
|
||||||
github.com/kava-labs/ethermint v0.21.0-kava-v26.2/go.mod h1:D8MKV53Ah21b+Bk78bQUwIwnOGu03TQ19buZXHgEujE=
|
|
||||||
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||||
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
|
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
|
||||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||||
@ -907,9 +924,11 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
|||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
|
github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
|
||||||
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
||||||
github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg=
|
github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg=
|
||||||
github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
|
github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
|
||||||
|
github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c=
|
||||||
github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8=
|
github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8=
|
||||||
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
|
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
|
||||||
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
|
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
|
||||||
@ -983,6 +1002,9 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua
|
|||||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||||
github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A=
|
github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A=
|
||||||
github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4=
|
github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4=
|
||||||
|
github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY=
|
||||||
|
github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU=
|
||||||
|
github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
@ -1020,6 +1042,7 @@ github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N
|
|||||||
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
|
github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
||||||
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
||||||
github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc=
|
github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc=
|
||||||
@ -1156,6 +1179,8 @@ github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfP
|
|||||||
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
||||||
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU=
|
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU=
|
||||||
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
|
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
|
||||||
|
github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
|
||||||
|
github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
|
||||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
@ -1209,6 +1234,7 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5
|
|||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
|
||||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
@ -1216,10 +1242,13 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU
|
|||||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
|
github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
|
||||||
github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
|
github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
|
||||||
|
github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw=
|
||||||
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY=
|
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY=
|
||||||
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=
|
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=
|
||||||
github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E=
|
github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E=
|
||||||
github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME=
|
github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME=
|
||||||
|
github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8=
|
||||||
|
github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I=
|
||||||
github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg=
|
github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg=
|
||||||
github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
|
github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
|
||||||
github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||||
@ -1271,6 +1300,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
|
|||||||
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||||
|
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U=
|
github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U=
|
||||||
github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=
|
github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=
|
||||||
@ -1343,6 +1373,7 @@ golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq
|
|||||||
golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us=
|
golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us=
|
||||||
golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
|
golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
|
||||||
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
|
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
|
||||||
|
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||||
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
@ -1355,6 +1386,7 @@ golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPI
|
|||||||
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||||
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||||
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||||
|
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
||||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
|
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
|
||||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
@ -1362,6 +1394,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
|||||||
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
|
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
|
||||||
|
golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
|
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
|
||||||
golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU=
|
golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU=
|
||||||
@ -1491,6 +1525,7 @@ golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5h
|
|||||||
golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@ -1557,7 +1592,6 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
@ -1645,6 +1679,7 @@ golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtn
|
|||||||
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.0.0-20191126055441-b0650ceb63d9/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
@ -1681,6 +1716,7 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
|||||||
golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
|
golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
|
golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
|
||||||
golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4=
|
golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4=
|
||||||
@ -1952,13 +1988,13 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy
|
|||||||
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
|
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
|
||||||
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
||||||
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
|
||||||
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
|
||||||
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU=
|
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU=
|
||||||
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c=
|
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c=
|
||||||
gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns=
|
|
||||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||||
gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0=
|
|
||||||
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
|
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
|
||||||
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
@ -1975,7 +2011,6 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C
|
|||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
|
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
|
||||||
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
|
||||||
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
|
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
|
||||||
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
|
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
@ -1995,6 +2030,7 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8
|
|||||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
||||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||||
|
rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU=
|
||||||
rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA=
|
rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA=
|
||||||
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
|
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
|
||||||
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
|
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
sdkmath "cosmossdk.io/math"
|
sdkmath "cosmossdk.io/math"
|
||||||
|
"github.com/0glabs/0g-chain/chaincfg"
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||||
@ -41,7 +42,7 @@ func TestResetPeriodVestingAccount_NoVestingPeriods(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestResetPeriodVestingAccount_SingleVestingPeriod_Vested(t *testing.T) {
|
func TestResetPeriodVestingAccount_SingleVestingPeriod_Vested(t *testing.T) {
|
||||||
balance := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6)))
|
balance := sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6)))
|
||||||
vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
|
vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
|
||||||
|
|
||||||
periods := vestingtypes.Periods{
|
periods := vestingtypes.Periods{
|
||||||
@ -64,7 +65,7 @@ func TestResetPeriodVestingAccount_SingleVestingPeriod_Vested(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestResetPeriodVestingAccount_SingleVestingPeriod_Vesting(t *testing.T) {
|
func TestResetPeriodVestingAccount_SingleVestingPeriod_Vesting(t *testing.T) {
|
||||||
balance := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6)))
|
balance := sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6)))
|
||||||
vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
|
vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
|
||||||
|
|
||||||
periods := vestingtypes.Periods{
|
periods := vestingtypes.Periods{
|
||||||
@ -97,7 +98,7 @@ func TestResetPeriodVestingAccount_SingleVestingPeriod_Vesting(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestResetPeriodVestingAccount_SingleVestingPeriod_ExactStartTime(t *testing.T) {
|
func TestResetPeriodVestingAccount_SingleVestingPeriod_ExactStartTime(t *testing.T) {
|
||||||
balance := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6)))
|
balance := sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6)))
|
||||||
vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
|
vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
|
||||||
|
|
||||||
periods := vestingtypes.Periods{
|
periods := vestingtypes.Periods{
|
||||||
@ -125,25 +126,25 @@ func TestResetPeriodVestingAccount_SingleVestingPeriod_ExactStartTime(t *testing
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestResetPeriodVestingAccount_MultiplePeriods(t *testing.T) {
|
func TestResetPeriodVestingAccount_MultiplePeriods(t *testing.T) {
|
||||||
balance := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(4e6)))
|
balance := sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(4e6)))
|
||||||
vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
|
vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
|
||||||
|
|
||||||
periods := vestingtypes.Periods{
|
periods := vestingtypes.Periods{
|
||||||
vestingtypes.Period{
|
vestingtypes.Period{
|
||||||
Length: 15 * 24 * 60 * 60, // -15 days - vested
|
Length: 15 * 24 * 60 * 60, // -15 days - vested
|
||||||
Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
|
Amount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6))),
|
||||||
},
|
},
|
||||||
vestingtypes.Period{
|
vestingtypes.Period{
|
||||||
Length: 15 * 24 * 60 * 60, // 0 days - exact on the start time
|
Length: 15 * 24 * 60 * 60, // 0 days - exact on the start time
|
||||||
Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
|
Amount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6))),
|
||||||
},
|
},
|
||||||
vestingtypes.Period{
|
vestingtypes.Period{
|
||||||
Length: 15 * 24 * 60 * 60, // +15 days - vesting
|
Length: 15 * 24 * 60 * 60, // +15 days - vesting
|
||||||
Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
|
Amount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6))),
|
||||||
},
|
},
|
||||||
vestingtypes.Period{
|
vestingtypes.Period{
|
||||||
Length: 15 * 24 * 60 * 60, // +30 days - vesting
|
Length: 15 * 24 * 60 * 60, // +30 days - vesting
|
||||||
Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
|
Amount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6))),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,36 +160,36 @@ func TestResetPeriodVestingAccount_MultiplePeriods(t *testing.T) {
|
|||||||
expectedPeriods := []vestingtypes.Period{
|
expectedPeriods := []vestingtypes.Period{
|
||||||
{
|
{
|
||||||
Length: 15 * 24 * 60 * 60, // 15 days
|
Length: 15 * 24 * 60 * 60, // 15 days
|
||||||
Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
|
Amount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6))),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Length: 15 * 24 * 60 * 60, // 15 days
|
Length: 15 * 24 * 60 * 60, // 15 days
|
||||||
Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
|
Amount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6))),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
assert.Equal(t, sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(2e6))), vacc.OriginalVesting, "expected original vesting to be updated")
|
assert.Equal(t, sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(2e6))), vacc.OriginalVesting, "expected original vesting to be updated")
|
||||||
assert.Equal(t, newVestingStartTime.Unix(), vacc.StartTime, "expected vesting start time to be updated")
|
assert.Equal(t, newVestingStartTime.Unix(), vacc.StartTime, "expected vesting start time to be updated")
|
||||||
assert.Equal(t, expectedEndtime, vacc.EndTime, "expected vesting end time end at last period")
|
assert.Equal(t, expectedEndtime, vacc.EndTime, "expected vesting end time end at last period")
|
||||||
assert.Equal(t, expectedPeriods, vacc.VestingPeriods, "expected vesting periods to be updated")
|
assert.Equal(t, expectedPeriods, vacc.VestingPeriods, "expected vesting periods to be updated")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestResetPeriodVestingAccount_DelegatedVesting_GreaterThanVesting(t *testing.T) {
|
func TestResetPeriodVestingAccount_DelegatedVesting_GreaterThanVesting(t *testing.T) {
|
||||||
balance := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(3e6)))
|
balance := sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(3e6)))
|
||||||
vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
|
vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
|
||||||
|
|
||||||
periods := vestingtypes.Periods{
|
periods := vestingtypes.Periods{
|
||||||
vestingtypes.Period{
|
vestingtypes.Period{
|
||||||
Length: 15 * 24 * 60 * 60, // -15 days - vested
|
Length: 15 * 24 * 60 * 60, // -15 days - vested
|
||||||
Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
|
Amount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6))),
|
||||||
},
|
},
|
||||||
vestingtypes.Period{
|
vestingtypes.Period{
|
||||||
Length: 15 * 24 * 60 * 60, // 0 days - exact on the start time
|
Length: 15 * 24 * 60 * 60, // 0 days - exact on the start time
|
||||||
Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
|
Amount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6))),
|
||||||
},
|
},
|
||||||
vestingtypes.Period{
|
vestingtypes.Period{
|
||||||
Length: 15 * 24 * 60 * 60, // +15 days - vesting
|
Length: 15 * 24 * 60 * 60, // +15 days - vesting
|
||||||
Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
|
Amount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6))),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,35 +199,35 @@ func TestResetPeriodVestingAccount_DelegatedVesting_GreaterThanVesting(t *testin
|
|||||||
newVestingStartTime := vestingStartTime.Add(30 * 24 * time.Hour)
|
newVestingStartTime := vestingStartTime.Add(30 * 24 * time.Hour)
|
||||||
ResetPeriodicVestingAccount(vacc, newVestingStartTime)
|
ResetPeriodicVestingAccount(vacc, newVestingStartTime)
|
||||||
|
|
||||||
assert.Equal(t, sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(2e6))), vacc.DelegatedFree, "expected delegated free to be updated")
|
assert.Equal(t, sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(2e6))), vacc.DelegatedFree, "expected delegated free to be updated")
|
||||||
assert.Equal(t, sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))), vacc.DelegatedVesting, "expected delegated vesting to be updated")
|
assert.Equal(t, sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6))), vacc.DelegatedVesting, "expected delegated vesting to be updated")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestResetPeriodVestingAccount_DelegatedVesting_LessThanVested(t *testing.T) {
|
func TestResetPeriodVestingAccount_DelegatedVesting_LessThanVested(t *testing.T) {
|
||||||
balance := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(3e6)))
|
balance := sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(3e6)))
|
||||||
vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
|
vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
|
||||||
|
|
||||||
periods := vestingtypes.Periods{
|
periods := vestingtypes.Periods{
|
||||||
vestingtypes.Period{
|
vestingtypes.Period{
|
||||||
Length: 15 * 24 * 60 * 60, // -15 days - vested
|
Length: 15 * 24 * 60 * 60, // -15 days - vested
|
||||||
Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
|
Amount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6))),
|
||||||
},
|
},
|
||||||
vestingtypes.Period{
|
vestingtypes.Period{
|
||||||
Length: 15 * 24 * 60 * 60, // 0 days - exact on the start time
|
Length: 15 * 24 * 60 * 60, // 0 days - exact on the start time
|
||||||
Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
|
Amount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6))),
|
||||||
},
|
},
|
||||||
vestingtypes.Period{
|
vestingtypes.Period{
|
||||||
Length: 15 * 24 * 60 * 60, // +15 days - vesting
|
Length: 15 * 24 * 60 * 60, // +15 days - vesting
|
||||||
Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
|
Amount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6))),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
vacc := createVestingAccount(balance, vestingStartTime, periods)
|
vacc := createVestingAccount(balance, vestingStartTime, periods)
|
||||||
vacc.TrackDelegation(vestingStartTime, balance, sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))))
|
vacc.TrackDelegation(vestingStartTime, balance, sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6))))
|
||||||
|
|
||||||
newVestingStartTime := vestingStartTime.Add(30 * 24 * time.Hour)
|
newVestingStartTime := vestingStartTime.Add(30 * 24 * time.Hour)
|
||||||
ResetPeriodicVestingAccount(vacc, newVestingStartTime)
|
ResetPeriodicVestingAccount(vacc, newVestingStartTime)
|
||||||
|
|
||||||
assert.Equal(t, sdk.Coins(nil), vacc.DelegatedFree, "expected delegrated free to be unmodified")
|
assert.Equal(t, sdk.Coins(nil), vacc.DelegatedFree, "expected delegrated free to be unmodified")
|
||||||
assert.Equal(t, sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))), vacc.DelegatedVesting, "expected delegated vesting to be unmodified")
|
assert.Equal(t, sdk.NewCoins(chaincfg.MakeCoinForGasDenom(sdkmath.NewInt(1e6))), vacc.DelegatedVesting, "expected delegated vesting to be unmodified")
|
||||||
}
|
}
|
||||||
|
85
networks/devnet/deploy.sh
Normal file
85
networks/devnet/deploy.sh
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function help() {
|
||||||
|
echo "Usage: deploy.sh IP1 [options]"
|
||||||
|
echo ""
|
||||||
|
echo " -i Identity file"
|
||||||
|
echo " -k Keyring password to create key (for Linux only)"
|
||||||
|
echo " -n Network (default: devnet)"
|
||||||
|
echo " -c Chain ID (default: \"zgtendermint_16600-1\")"
|
||||||
|
echo " -v schedule end time (unix epoch) for vesting accounts"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ $# -eq 0 ]]; then
|
||||||
|
help
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
IP_LIST=$1
|
||||||
|
shift
|
||||||
|
PEM_FLAG=""
|
||||||
|
KEYRING_PASSWORD=""
|
||||||
|
NETWORK="devnet"
|
||||||
|
TAG_OR_BRANCH="testnet/v0.2.x"
|
||||||
|
INIT_GENESIS_ENV=""
|
||||||
|
VESTING_ACCOUNT_END_TIME=0
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
-i)
|
||||||
|
PEM_FLAG="-i $2";
|
||||||
|
shift; shift
|
||||||
|
;;
|
||||||
|
-k)
|
||||||
|
KEYRING_PASSWORD=$2;
|
||||||
|
shift; shift
|
||||||
|
;;
|
||||||
|
-n)
|
||||||
|
NETWORK=$2
|
||||||
|
INIT_GENESIS_ENV="$INIT_GENESIS_ENV export ROOT_DIR=$2;"
|
||||||
|
shift; shift
|
||||||
|
;;
|
||||||
|
-c)
|
||||||
|
INIT_GENESIS_ENV="$INIT_GENESIS_ENV export CHAIN_ID=$2;"
|
||||||
|
shift; shift
|
||||||
|
;;
|
||||||
|
-v)
|
||||||
|
INIT_GENESIS_ENV="$INIT_GENESIS_ENV export VESTING_ACCOUNT_END_TIME=$2;"
|
||||||
|
shift; shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
help
|
||||||
|
echo "Unknown flag passed: \"$1\""
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
IFS=","; declare -a IPS=($IP_LIST); unset IFS
|
||||||
|
NUM_NODES=${#IPS[@]}
|
||||||
|
|
||||||
|
# Install dependent libraries and binary
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
ssh $PEM_FLAG ubuntu@${IPS[$i]} "rm -rf 0g-chain; git clone https://github.com/0glabs/0g-chain.git; cd 0g-chain; git checkout $TAG_OR_BRANCH; ./networks/$NETWORK/install.sh"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Create genesis config on node0
|
||||||
|
ssh $PEM_FLAG ubuntu@${IPS[0]} "cd 0g-chain/networks/$NETWORK; $INIT_GENESIS_ENV ./init-genesis.sh $IP_LIST $KEYRING_PASSWORD; tar czf ~/$NETWORK.tar.gz $NETWORK; rm -rf $NETWORK"
|
||||||
|
scp $PEM_FLAG ubuntu@${IPS[0]}:$NETWORK.tar.gz .
|
||||||
|
ssh $PEM_FLAG ubuntu@${IPS[0]} "rm $NETWORK.tar.gz"
|
||||||
|
|
||||||
|
# Copy genesis config to remote nodes
|
||||||
|
tar xzf $NETWORK.tar.gz
|
||||||
|
rm $NETWORK.tar.gz
|
||||||
|
cd $NETWORK
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
tar czf node$i.tar.gz node$i
|
||||||
|
scp $PEM_FLAG node$i.tar.gz ubuntu@${IPS[$i]}:~
|
||||||
|
ssh $PEM_FLAG ubuntu@${IPS[$i]} "rm -rf 0gchaind-$NETWORK; tar xzf node$i.tar.gz; rm node$i.tar.gz; mv node$i 0gchaind-$NETWORK"
|
||||||
|
rm node$i.tar.gz
|
||||||
|
done
|
||||||
|
|
||||||
|
echo -e "\n\nSucceeded to deploy on $NUM_NODES nodes!\n"
|
193
networks/devnet/init-genesis.sh
Normal file
193
networks/devnet/init-genesis.sh
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
ROOT_DIR=${ROOT_DIR:-devnet}
|
||||||
|
CHAIN_ID=${CHAIN_ID:-zgtendermint_16600-1}
|
||||||
|
|
||||||
|
# Usage: init-genesis.sh IP1 KEYRING_PASSWORD
|
||||||
|
OS_NAME=`uname -o`
|
||||||
|
USAGE="Usage: ${BASH_SOURCE[0]} IP1"
|
||||||
|
if [[ "$OS_NAME" = "GNU/Linux" ]]; then
|
||||||
|
USAGE="$USAGE KEYRING_PASSWORD"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $# -eq 0 ]]; then
|
||||||
|
echo "IP list not specified"
|
||||||
|
echo $USAGE
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$OS_NAME" = "GNU/Linux" ]]; then
|
||||||
|
if [[ $# -eq 1 ]]; then
|
||||||
|
echo "Keyring password not specified"
|
||||||
|
echo $USAGE
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
PASSWORD=$2
|
||||||
|
fi
|
||||||
|
|
||||||
|
0gchaind version 2>/dev/null || export PATH=$PATH:$(go env GOPATH)/bin
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
IFS=","; declare -a IPS=($1); unset IFS
|
||||||
|
|
||||||
|
NUM_NODES=${#IPS[@]}
|
||||||
|
VALIDATOR_BALANCE=25000000000000ua0gi
|
||||||
|
FAUCET_BALANCE=500000000000000ua0gi
|
||||||
|
STAKING=5000000000000ua0gi
|
||||||
|
VESTING_BALANCE=400000000000000ua0gi
|
||||||
|
|
||||||
|
VESTING_ACCOUNT_START_TIME=$(date -u +%s)
|
||||||
|
|
||||||
|
# Init configs
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
HOMEDIR="$ROOT_DIR"/node$i
|
||||||
|
|
||||||
|
# Change parameter token denominations to neuron
|
||||||
|
GENESIS="$HOMEDIR"/config/genesis.json
|
||||||
|
TMP_GENESIS="$HOMEDIR"/config/tmp_genesis.json
|
||||||
|
|
||||||
|
# Init
|
||||||
|
0gchaind init "node$i" --home "$HOMEDIR" --chain-id "$CHAIN_ID" >/dev/null 2>&1
|
||||||
|
|
||||||
|
# Replace stake with neuron
|
||||||
|
sed -in-place='' 's/stake/ua0gi/g' "$GENESIS"
|
||||||
|
|
||||||
|
# Replace the default evm denom of aphoton with neuron
|
||||||
|
sed -in-place='' 's/aphoton/neuron/g' "$GENESIS"
|
||||||
|
|
||||||
|
cat $GENESIS | jq '.consensus_params.block.max_gas = "25000000"' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
|
||||||
|
# Zero out the total supply so it gets recalculated during InitGenesis
|
||||||
|
cat $GENESIS | jq '.app_state.bank.supply = []' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
|
||||||
|
# Disable fee market
|
||||||
|
cat $GENESIS | jq '.app_state.feemarket.params.no_base_fee = true' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
|
||||||
|
# Disable london fork
|
||||||
|
cat $GENESIS | jq '.app_state.evm.params.chain_config.london_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
cat $GENESIS | jq '.app_state.evm.params.chain_config.arrow_glacier_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
cat $GENESIS | jq '.app_state.evm.params.chain_config.gray_glacier_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
cat $GENESIS | jq '.app_state.evm.params.chain_config.merge_netsplit_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
cat $GENESIS | jq '.app_state.evm.params.chain_config.shanghai_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
cat $GENESIS | jq '.app_state.evm.params.chain_config.cancun_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
|
||||||
|
# cat "$GENESIS" | jq '.app_state["staking"]["params"]["bond_denom"]="a0gi"' >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
|
||||||
|
# cat "$GENESIS" | jq '.app_state["gov"]["params"]["min_deposit"][0]["denom"]="a0gi"' >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
|
||||||
|
|
||||||
|
cat "$GENESIS" | jq '.app_state["staking"]["params"]["max_validators"]=200' >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
|
||||||
|
cat "$GENESIS" | jq '.app_state["slashing"]["params"]["signed_blocks_window"]="1000"' >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
|
||||||
|
|
||||||
|
cat "$GENESIS" | jq '.app_state["consensus_params"]["block"]["time_iota_ms"]="3000"' >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
|
||||||
|
cat "$GENESIS" | jq '.app_state.gov.voting_params.voting_period = "300s"' >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
|
||||||
|
|
||||||
|
# Change app.toml
|
||||||
|
APP_TOML="$HOMEDIR"/config/app.toml
|
||||||
|
sed -i 's/minimum-gas-prices = "0neuron"/minimum-gas-prices = "1000000000neuron"/' "$APP_TOML"
|
||||||
|
sed -i '/\[json-rpc\]/,/^\[/ s/enable = false/enable = true/' "$APP_TOML"
|
||||||
|
sed -i '/\[json-rpc\]/,/^\[/ s/address = "127.0.0.1:8545"/address = "0.0.0.0:8545"/' "$APP_TOML"
|
||||||
|
|
||||||
|
# Set evm tracer to json
|
||||||
|
# sed -in-place='' 's/tracer = ""/tracer = "json"/g' "$APP_TOML"
|
||||||
|
|
||||||
|
# Enable full error trace to be returned on tx failure
|
||||||
|
sed -in-place='' '/iavl-cache-size/a\
|
||||||
|
trace = true' "$APP_TOML"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Update seeds in config.toml
|
||||||
|
SEEDS=""
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
if [[ $i -gt 0 ]]; then SEEDS=$SEEDS,; fi
|
||||||
|
NODE_ID=`0gchaind tendermint show-node-id --home $ROOT_DIR/node$i`
|
||||||
|
SEEDS=$SEEDS$NODE_ID@${IPS[$i]}:26656
|
||||||
|
done
|
||||||
|
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
sed -i "/seeds = /c\seeds = \"$SEEDS\"" "$ROOT_DIR"/node$i/config/config.toml
|
||||||
|
done
|
||||||
|
|
||||||
|
# Prepare validators
|
||||||
|
#
|
||||||
|
# Note, keyring backend `file` works bad on Windows, and `add-genesis-account`
|
||||||
|
# do not supports --keyring-dir flag. As a result, we use keyring backend `os`,
|
||||||
|
# which is the default value.
|
||||||
|
#
|
||||||
|
# Where key stored:
|
||||||
|
# - Windows: Windows credentials management.
|
||||||
|
# - Linux: under `--home` specified folder.
|
||||||
|
if [[ "$OS_NAME" = "Msys" ]]; then
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
VALIDATOR="0gchain_validator_$i"
|
||||||
|
set +e
|
||||||
|
ret=`0gchaind keys list --keyring-backend os -n | grep $VALIDATOR`
|
||||||
|
set -e
|
||||||
|
if [[ "$ret" = "" ]]; then
|
||||||
|
echo "Create validator key: $VALIDATOR"
|
||||||
|
0gchaind keys add $VALIDATOR --keyring-backend os --eth
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
elif [[ "$OS_NAME" = "GNU/Linux" ]]; then
|
||||||
|
# Create N validators for node0
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
yes $PASSWORD | 0gchaind keys add "0gchain_validator_$i" --keyring-backend os --home "$ROOT_DIR"/node0 --eth
|
||||||
|
done
|
||||||
|
|
||||||
|
# Copy validators to other nodes
|
||||||
|
for ((i=1; i<$NUM_NODES; i++)) do
|
||||||
|
cp "$ROOT_DIR"/node0/keyhash "$ROOT_DIR"/node$i
|
||||||
|
cp "$ROOT_DIR"/node0/*.address "$ROOT_DIR"/node$i
|
||||||
|
cp "$ROOT_DIR"/node0/*.info "$ROOT_DIR"/node$i
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo -e "\n\nOS: $OS_NAME"
|
||||||
|
echo "Unsupported OS to generate keys for validators!!!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add all validators in genesis
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
for ((j=0; j<$NUM_NODES; j++)) do
|
||||||
|
if [[ "$OS_NAME" = "GNU/Linux" ]]; then
|
||||||
|
yes $PASSWORD | 0gchaind add-genesis-account "0gchain_validator_$j" $VALIDATOR_BALANCE --home "$ROOT_DIR/node$i"
|
||||||
|
else
|
||||||
|
0gchaind add-genesis-account "0gchain_validator_$j" $VALIDATOR_BALANCE --home "$ROOT_DIR/node$i"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
0gchaind add-genesis-account 0g1zyvrkyr8pmczkguxztxpp3qcd0uhkt0tfxjupt $FAUCET_BALANCE --home "$ROOT_DIR/node$i"
|
||||||
|
0gchaind add-genesis-account 0g1jwuhghh6qrln4tthhqrdt3qrmjn9zm05xns46u $VESTING_BALANCE --vesting-amount $VESTING_BALANCE --vesting-start-time $VESTING_ACCOUNT_START_TIME --vesting-end-time $VESTING_ACCOUNT_END_TIME --home "$ROOT_DIR/node$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Prepare genesis txs
|
||||||
|
mkdir -p "$ROOT_DIR"/gentxs
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
if [[ "$OS_NAME" = "GNU/Linux" ]]; then
|
||||||
|
yes $PASSWORD | 0gchaind gentx "0gchain_validator_$i" $STAKING --home "$ROOT_DIR/node$i" --output-document "$ROOT_DIR/gentxs/node$i.json"
|
||||||
|
else
|
||||||
|
0gchaind gentx "0gchain_validator_$i" $STAKING --home "$ROOT_DIR/node$i" --output-document "$ROOT_DIR/gentxs/node$i.json"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Create genesis at node0 and copy to other nodes
|
||||||
|
0gchaind collect-gentxs --home "$ROOT_DIR/node0" --gentx-dir "$ROOT_DIR/gentxs" >/dev/null 2>&1
|
||||||
|
sed -i '/persistent_peers = /c\persistent_peers = ""' "$ROOT_DIR"/node0/config/config.toml
|
||||||
|
0gchaind validate-genesis --home "$ROOT_DIR/node0"
|
||||||
|
for ((i=1; i<$NUM_NODES; i++)) do
|
||||||
|
cp "$ROOT_DIR"/node0/config/genesis.json "$ROOT_DIR"/node$i/config/genesis.json
|
||||||
|
done
|
||||||
|
|
||||||
|
# For linux, backup keys for all validators
|
||||||
|
if [[ "$OS_NAME" = "GNU/Linux" ]]; then
|
||||||
|
mkdir -p "$ROOT_DIR"/keyring-os
|
||||||
|
|
||||||
|
cp "$ROOT_DIR"/node0/keyhash "$ROOT_DIR"/keyring-os
|
||||||
|
cp "$ROOT_DIR"/node0/*.address "$ROOT_DIR"/keyring-os
|
||||||
|
cp "$ROOT_DIR"/node0/*.info "$ROOT_DIR"/keyring-os
|
||||||
|
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
rm -f "$ROOT_DIR"/node$i/keyhash "$ROOT_DIR"/node$i/*.address "$ROOT_DIR"/node$i/*.info
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "\n\nSucceeded to init genesis!\n"
|
21
networks/devnet/install.sh
Normal file
21
networks/devnet/install.sh
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Install dependent libraries
|
||||||
|
go version 2>/dev/null || sudo snap install go --classic
|
||||||
|
jq --version 2>/dev/null || sudo snap install jq
|
||||||
|
make --version 2>/dev/null || sudo apt install make -y
|
||||||
|
gcc --version 2>/dev/null || (sudo apt-get update; sudo apt install gcc -y)
|
||||||
|
|
||||||
|
# Build binary
|
||||||
|
export PATH=$PATH:$(go env GOPATH)/bin
|
||||||
|
0gchaind version 2>/dev/null
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
# Make under root dir
|
||||||
|
SCRIPT_DIR=`dirname "${BASH_SOURCE[0]}"`
|
||||||
|
cd $SCRIPT_DIR/../..
|
||||||
|
rm -rf $(go env GOPATH)/bin/0gchaind
|
||||||
|
make install
|
||||||
|
|
||||||
|
# Add gopath to path
|
||||||
|
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.profile
|
||||||
|
fi
|
@ -1,4 +1,4 @@
|
|||||||
all:
|
all:
|
||||||
docker build --tag kava/kavanode kavanode
|
docker build --tag 0glabs/0g-chain-node 0g-chain-node
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
|
84
networks/testnet/deploy.sh
Normal file
84
networks/testnet/deploy.sh
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function help() {
|
||||||
|
echo "Usage: deploy.sh IP1,IP2,IP3 [options]"
|
||||||
|
echo ""
|
||||||
|
echo " -i Identity file"
|
||||||
|
echo " -k Keyring password to create key (for Linux only)"
|
||||||
|
echo " -n Network (default: testnet)"
|
||||||
|
echo " -c Chain ID (default: \"zgtendermint_16600-1\")"
|
||||||
|
echo " -v schedule end time (unix epoch) for vesting accounts"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ $# -eq 0 ]]; then
|
||||||
|
help
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
IP_LIST=$1
|
||||||
|
shift
|
||||||
|
PEM_FLAG=""
|
||||||
|
KEYRING_PASSWORD=""
|
||||||
|
NETWORK="testnet"
|
||||||
|
INIT_GENESIS_ENV=""
|
||||||
|
VESTING_ACCOUNT_END_TIME=0
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
-i)
|
||||||
|
PEM_FLAG="-i $2";
|
||||||
|
shift; shift
|
||||||
|
;;
|
||||||
|
-k)
|
||||||
|
KEYRING_PASSWORD=$2;
|
||||||
|
shift; shift
|
||||||
|
;;
|
||||||
|
-n)
|
||||||
|
NETWORK=$2
|
||||||
|
INIT_GENESIS_ENV="$INIT_GENESIS_ENV export ROOT_DIR=$2;"
|
||||||
|
shift; shift
|
||||||
|
;;
|
||||||
|
-c)
|
||||||
|
INIT_GENESIS_ENV="$INIT_GENESIS_ENV export CHAIN_ID=$2;"
|
||||||
|
shift; shift
|
||||||
|
;;
|
||||||
|
-v)
|
||||||
|
INIT_GENESIS_ENV="$INIT_GENESIS_ENV export VESTING_ACCOUNT_END_TIME=$2;"
|
||||||
|
shift; shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
help
|
||||||
|
echo "Unknown flag passed: \"$1\""
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
IFS=","; declare -a IPS=($IP_LIST); unset IFS
|
||||||
|
NUM_NODES=${#IPS[@]}
|
||||||
|
|
||||||
|
# Install dependent libraries and binary
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
ssh $PEM_FLAG ubuntu@${IPS[$i]} "rm -rf 0g-chain; git clone https://github.com/0glabs/0g-chain.git; cd 0g-chain; git checkout v0.2.3; ./networks/testnet/install.sh"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Create genesis config on node0
|
||||||
|
ssh $PEM_FLAG ubuntu@${IPS[0]} "cd 0g-chain/networks/testnet; $INIT_GENESIS_ENV ./init-genesis.sh $IP_LIST $KEYRING_PASSWORD; tar czf ~/$NETWORK.tar.gz $NETWORK; rm -rf $NETWORK"
|
||||||
|
scp $PEM_FLAG ubuntu@${IPS[0]}:$NETWORK.tar.gz .
|
||||||
|
ssh $PEM_FLAG ubuntu@${IPS[0]} "rm $NETWORK.tar.gz"
|
||||||
|
|
||||||
|
# Copy genesis config to remote nodes
|
||||||
|
tar xzf $NETWORK.tar.gz
|
||||||
|
rm $NETWORK.tar.gz
|
||||||
|
cd $NETWORK
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
tar czf node$i.tar.gz node$i
|
||||||
|
scp $PEM_FLAG node$i.tar.gz ubuntu@${IPS[$i]}:~
|
||||||
|
ssh $PEM_FLAG ubuntu@${IPS[$i]} "rm -rf 0gchaind-prod; tar xzf node$i.tar.gz; rm node$i.tar.gz; mv node$i 0gchaind-prod"
|
||||||
|
rm node$i.tar.gz
|
||||||
|
done
|
||||||
|
|
||||||
|
echo -e "\n\nSucceeded to deploy on $NUM_NODES nodes!\n"
|
192
networks/testnet/init-genesis.sh
Normal file
192
networks/testnet/init-genesis.sh
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
ROOT_DIR=${ROOT_DIR:-testnet}
|
||||||
|
CHAIN_ID=${CHAIN_ID:-zgtendermint_16600-1}
|
||||||
|
|
||||||
|
# Usage: init-genesis.sh IP1,IP2,IP3 KEYRING_PASSWORD
|
||||||
|
OS_NAME=`uname -o`
|
||||||
|
USAGE="Usage: ${BASH_SOURCE[0]} IP1,IP2,IP3"
|
||||||
|
if [[ "$OS_NAME" = "GNU/Linux" ]]; then
|
||||||
|
USAGE="$USAGE KEYRING_PASSWORD"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $# -eq 0 ]]; then
|
||||||
|
echo "IP list not specified"
|
||||||
|
echo $USAGE
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$OS_NAME" = "GNU/Linux" ]]; then
|
||||||
|
if [[ $# -eq 1 ]]; then
|
||||||
|
echo "Keyring password not specified"
|
||||||
|
echo $USAGE
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
PASSWORD=$2
|
||||||
|
fi
|
||||||
|
|
||||||
|
0gchaind version 2>/dev/null || export PATH=$PATH:$(go env GOPATH)/bin
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
IFS=","; declare -a IPS=($1); unset IFS
|
||||||
|
|
||||||
|
NUM_NODES=${#IPS[@]}
|
||||||
|
VALIDATOR_BALANCE=25000000000000ua0gi
|
||||||
|
FAUCET_BALANCE=500000000000000ua0gi
|
||||||
|
STAKING=5000000000000ua0gi
|
||||||
|
VESTING_BALANCE=400000000000000ua0gi
|
||||||
|
|
||||||
|
VESTING_ACCOUNT_START_TIME=$(date -u +%s)
|
||||||
|
|
||||||
|
# Init configs
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
HOMEDIR="$ROOT_DIR"/node$i
|
||||||
|
|
||||||
|
# Change parameter token denominations to neuron
|
||||||
|
GENESIS="$HOMEDIR"/config/genesis.json
|
||||||
|
TMP_GENESIS="$HOMEDIR"/config/tmp_genesis.json
|
||||||
|
|
||||||
|
# Init
|
||||||
|
0gchaind init "node$i" --home "$HOMEDIR" --chain-id "$CHAIN_ID" >/dev/null 2>&1
|
||||||
|
|
||||||
|
# Replace stake with neuron
|
||||||
|
sed -in-place='' 's/stake/ua0gi/g' "$GENESIS"
|
||||||
|
|
||||||
|
# Replace the default evm denom of aphoton with neuron
|
||||||
|
sed -in-place='' 's/aphoton/neuron/g' "$GENESIS"
|
||||||
|
|
||||||
|
cat $GENESIS | jq '.consensus_params.block.max_gas = "25000000"' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
|
||||||
|
# Zero out the total supply so it gets recalculated during InitGenesis
|
||||||
|
cat $GENESIS | jq '.app_state.bank.supply = []' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
|
||||||
|
# Disable fee market
|
||||||
|
cat $GENESIS | jq '.app_state.feemarket.params.no_base_fee = true' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
|
||||||
|
# Disable london fork
|
||||||
|
cat $GENESIS | jq '.app_state.evm.params.chain_config.london_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
cat $GENESIS | jq '.app_state.evm.params.chain_config.arrow_glacier_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
cat $GENESIS | jq '.app_state.evm.params.chain_config.gray_glacier_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
cat $GENESIS | jq '.app_state.evm.params.chain_config.merge_netsplit_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
cat $GENESIS | jq '.app_state.evm.params.chain_config.shanghai_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
cat $GENESIS | jq '.app_state.evm.params.chain_config.cancun_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS
|
||||||
|
|
||||||
|
# cat "$GENESIS" | jq '.app_state["staking"]["params"]["bond_denom"]="a0gi"' >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
|
||||||
|
# cat "$GENESIS" | jq '.app_state["gov"]["params"]["min_deposit"][0]["denom"]="a0gi"' >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
|
||||||
|
|
||||||
|
cat "$GENESIS" | jq '.app_state["staking"]["params"]["max_validators"]=125' >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
|
||||||
|
cat "$GENESIS" | jq '.app_state["slashing"]["params"]["signed_blocks_window"]="1000"' >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
|
||||||
|
|
||||||
|
cat "$GENESIS" | jq '.app_state["consensus_params"]["block"]["time_iota_ms"]="3000"' >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
|
||||||
|
|
||||||
|
# Change app.toml
|
||||||
|
APP_TOML="$HOMEDIR"/config/app.toml
|
||||||
|
sed -i 's/minimum-gas-prices = "0neuron"/minimum-gas-prices = "1000000000neuron"/' "$APP_TOML"
|
||||||
|
sed -i '/\[json-rpc\]/,/^\[/ s/enable = false/enable = true/' "$APP_TOML"
|
||||||
|
sed -i '/\[json-rpc\]/,/^\[/ s/address = "127.0.0.1:8545"/address = "0.0.0.0:8545"/' "$APP_TOML"
|
||||||
|
|
||||||
|
# Set evm tracer to json
|
||||||
|
# sed -in-place='' 's/tracer = ""/tracer = "json"/g' "$APP_TOML"
|
||||||
|
|
||||||
|
# Enable full error trace to be returned on tx failure
|
||||||
|
sed -in-place='' '/iavl-cache-size/a\
|
||||||
|
trace = true' "$APP_TOML"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Update seeds in config.toml
|
||||||
|
SEEDS=""
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
if [[ $i -gt 0 ]]; then SEEDS=$SEEDS,; fi
|
||||||
|
NODE_ID=`0gchaind tendermint show-node-id --home $ROOT_DIR/node$i`
|
||||||
|
SEEDS=$SEEDS$NODE_ID@${IPS[$i]}:26656
|
||||||
|
done
|
||||||
|
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
sed -i "/seeds = /c\seeds = \"$SEEDS\"" "$ROOT_DIR"/node$i/config/config.toml
|
||||||
|
done
|
||||||
|
|
||||||
|
# Prepare validators
|
||||||
|
#
|
||||||
|
# Note, keyring backend `file` works bad on Windows, and `add-genesis-account`
|
||||||
|
# do not supports --keyring-dir flag. As a result, we use keyring backend `os`,
|
||||||
|
# which is the default value.
|
||||||
|
#
|
||||||
|
# Where key stored:
|
||||||
|
# - Windows: Windows credentials management.
|
||||||
|
# - Linux: under `--home` specified folder.
|
||||||
|
if [[ "$OS_NAME" = "Msys" ]]; then
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
VALIDATOR="0gchain_validator_$i"
|
||||||
|
set +e
|
||||||
|
ret=`0gchaind keys list --keyring-backend os -n | grep $VALIDATOR`
|
||||||
|
set -e
|
||||||
|
if [[ "$ret" = "" ]]; then
|
||||||
|
echo "Create validator key: $VALIDATOR"
|
||||||
|
0gchaind keys add $VALIDATOR --keyring-backend os --eth
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
elif [[ "$OS_NAME" = "GNU/Linux" ]]; then
|
||||||
|
# Create N validators for node0
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
yes $PASSWORD | 0gchaind keys add "0gchain_validator_$i" --keyring-backend os --home "$ROOT_DIR"/node0 --eth
|
||||||
|
done
|
||||||
|
|
||||||
|
# Copy validators to other nodes
|
||||||
|
for ((i=1; i<$NUM_NODES; i++)) do
|
||||||
|
cp "$ROOT_DIR"/node0/keyhash "$ROOT_DIR"/node$i
|
||||||
|
cp "$ROOT_DIR"/node0/*.address "$ROOT_DIR"/node$i
|
||||||
|
cp "$ROOT_DIR"/node0/*.info "$ROOT_DIR"/node$i
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo -e "\n\nOS: $OS_NAME"
|
||||||
|
echo "Unsupported OS to generate keys for validators!!!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add all validators in genesis
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
for ((j=0; j<$NUM_NODES; j++)) do
|
||||||
|
if [[ "$OS_NAME" = "GNU/Linux" ]]; then
|
||||||
|
yes $PASSWORD | 0gchaind add-genesis-account "0gchain_validator_$j" $VALIDATOR_BALANCE --home "$ROOT_DIR/node$i"
|
||||||
|
else
|
||||||
|
0gchaind add-genesis-account "0gchain_validator_$j" $VALIDATOR_BALANCE --home "$ROOT_DIR/node$i"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
0gchaind add-genesis-account 0g1e4t48fq42tqxpapvpnuc9n9k998eex9rnyqzwm $FAUCET_BALANCE --home "$ROOT_DIR/node$i"
|
||||||
|
0gchaind add-genesis-account 0g16yvxafe63uzuxu6xpvpxdz9agdvnh0zn8vnuj6 $VESTING_BALANCE --vesting-amount $VESTING_BALANCE --vesting-start-time $VESTING_ACCOUNT_START_TIME --vesting-end-time $VESTING_ACCOUNT_END_TIME --home "$ROOT_DIR/node$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Prepare genesis txs
|
||||||
|
mkdir -p "$ROOT_DIR"/gentxs
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
if [[ "$OS_NAME" = "GNU/Linux" ]]; then
|
||||||
|
yes $PASSWORD | 0gchaind gentx "0gchain_validator_$i" $STAKING --home "$ROOT_DIR/node$i" --output-document "$ROOT_DIR/gentxs/node$i.json"
|
||||||
|
else
|
||||||
|
0gchaind gentx "0gchain_validator_$i" $STAKING --home "$ROOT_DIR/node$i" --output-document "$ROOT_DIR/gentxs/node$i.json"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Create genesis at node0 and copy to other nodes
|
||||||
|
0gchaind collect-gentxs --home "$ROOT_DIR/node0" --gentx-dir "$ROOT_DIR/gentxs" >/dev/null 2>&1
|
||||||
|
sed -i '/persistent_peers = /c\persistent_peers = ""' "$ROOT_DIR"/node0/config/config.toml
|
||||||
|
0gchaind validate-genesis --home "$ROOT_DIR/node0"
|
||||||
|
for ((i=1; i<$NUM_NODES; i++)) do
|
||||||
|
cp "$ROOT_DIR"/node0/config/genesis.json "$ROOT_DIR"/node$i/config/genesis.json
|
||||||
|
done
|
||||||
|
|
||||||
|
# For linux, backup keys for all validators
|
||||||
|
if [[ "$OS_NAME" = "GNU/Linux" ]]; then
|
||||||
|
mkdir -p "$ROOT_DIR"/keyring-os
|
||||||
|
|
||||||
|
cp "$ROOT_DIR"/node0/keyhash "$ROOT_DIR"/keyring-os
|
||||||
|
cp "$ROOT_DIR"/node0/*.address "$ROOT_DIR"/keyring-os
|
||||||
|
cp "$ROOT_DIR"/node0/*.info "$ROOT_DIR"/keyring-os
|
||||||
|
|
||||||
|
for ((i=0; i<$NUM_NODES; i++)) do
|
||||||
|
rm -f "$ROOT_DIR"/node$i/keyhash "$ROOT_DIR"/node$i/*.address "$ROOT_DIR"/node$i/*.info
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "\n\nSucceeded to init genesis!\n"
|
21
networks/testnet/install.sh
Normal file
21
networks/testnet/install.sh
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Install dependent libraries
|
||||||
|
go version 2>/dev/null || sudo snap install go --classic
|
||||||
|
jq --version 2>/dev/null || sudo snap install jq
|
||||||
|
make --version 2>/dev/null || sudo apt install make -y
|
||||||
|
gcc --version 2>/dev/null || (sudo apt-get update; sudo apt install gcc -y)
|
||||||
|
|
||||||
|
# Build binary
|
||||||
|
export PATH=$PATH:$(go env GOPATH)/bin
|
||||||
|
0gchaind version 2>/dev/null
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
# Make under root dir
|
||||||
|
SCRIPT_DIR=`dirname "${BASH_SOURCE[0]}"`
|
||||||
|
cd $SCRIPT_DIR/../..
|
||||||
|
rm -rf $(go env GOPATH)/bin/0gchaind
|
||||||
|
make install
|
||||||
|
|
||||||
|
# Add gopath to path
|
||||||
|
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.profile
|
||||||
|
fi
|
6
precompiles/common/errors.go
Normal file
6
precompiles/common/errors.go
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
const (
|
||||||
|
ErrGetStateDB = "get EVM StateDB failed"
|
||||||
|
ErrInvalidNumberOfArgs = "invalid number of arguments; expected %d; got: %d"
|
||||||
|
)
|
428
precompiles/dasigners/IDASigners.abi
Normal file
428
precompiles/dasigners/IDASigners.abi
Normal file
@ -0,0 +1,428 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "signer",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "X",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "Y",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "struct BN254.G1Point",
|
||||||
|
"name": "pkG1",
|
||||||
|
"type": "tuple"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256[2]",
|
||||||
|
"name": "X",
|
||||||
|
"type": "uint256[2]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256[2]",
|
||||||
|
"name": "Y",
|
||||||
|
"type": "uint256[2]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "struct BN254.G2Point",
|
||||||
|
"name": "pkG2",
|
||||||
|
"type": "tuple"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "NewSigner",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "signer",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "string",
|
||||||
|
"name": "socket",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "SocketUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "epochNumber",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_epoch",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_quorumId",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "bytes",
|
||||||
|
"name": "_quorumBitmap",
|
||||||
|
"type": "bytes"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "getAggPkG1",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "X",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "Y",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"internalType": "struct BN254.G1Point",
|
||||||
|
"name": "aggPkG1",
|
||||||
|
"type": "tuple"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "total",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "hit",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_epoch",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_quorumId",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "getQuorum",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address[]",
|
||||||
|
"name": "",
|
||||||
|
"type": "address[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_epoch",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_quorumId",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint32",
|
||||||
|
"name": "_rowIndex",
|
||||||
|
"type": "uint32"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "getQuorumRow",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address[]",
|
||||||
|
"name": "_account",
|
||||||
|
"type": "address[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "getSigner",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "signer",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "string",
|
||||||
|
"name": "socket",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "X",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "Y",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"internalType": "struct BN254.G1Point",
|
||||||
|
"name": "pkG1",
|
||||||
|
"type": "tuple"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256[2]",
|
||||||
|
"name": "X",
|
||||||
|
"type": "uint256[2]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256[2]",
|
||||||
|
"name": "Y",
|
||||||
|
"type": "uint256[2]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"internalType": "struct BN254.G2Point",
|
||||||
|
"name": "pkG2",
|
||||||
|
"type": "tuple"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"internalType": "struct IDASigners.SignerDetail[]",
|
||||||
|
"name": "",
|
||||||
|
"type": "tuple[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "_account",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "isSigner",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_epoch",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "quorumCount",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "X",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "Y",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"internalType": "struct BN254.G1Point",
|
||||||
|
"name": "_signature",
|
||||||
|
"type": "tuple"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "registerNextEpoch",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "signer",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "string",
|
||||||
|
"name": "socket",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "X",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "Y",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"internalType": "struct BN254.G1Point",
|
||||||
|
"name": "pkG1",
|
||||||
|
"type": "tuple"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256[2]",
|
||||||
|
"name": "X",
|
||||||
|
"type": "uint256[2]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256[2]",
|
||||||
|
"name": "Y",
|
||||||
|
"type": "uint256[2]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"internalType": "struct BN254.G2Point",
|
||||||
|
"name": "pkG2",
|
||||||
|
"type": "tuple"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"internalType": "struct IDASigners.SignerDetail",
|
||||||
|
"name": "_signer",
|
||||||
|
"type": "tuple"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "X",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "Y",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"internalType": "struct BN254.G1Point",
|
||||||
|
"name": "_signature",
|
||||||
|
"type": "tuple"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "registerSigner",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "_account",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_epoch",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "registeredEpoch",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "string",
|
||||||
|
"name": "_socket",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "updateSocket",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
}
|
||||||
|
]
|
801
precompiles/dasigners/contract.go
Normal file
801
precompiles/dasigners/contract.go
Normal file
File diff suppressed because one or more lines are too long
155
precompiles/dasigners/dasigners.go
Normal file
155
precompiles/dasigners/dasigners.go
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
package dasigners
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
precopmiles_common "github.com/0glabs/0g-chain/precompiles/common"
|
||||||
|
dasignerskeeper "github.com/0glabs/0g-chain/x/dasigners/v1/keeper"
|
||||||
|
storetypes "github.com/cosmos/cosmos-sdk/store/types"
|
||||||
|
"github.com/ethereum/go-ethereum/accounts/abi"
|
||||||
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
"github.com/ethereum/go-ethereum/core/vm"
|
||||||
|
"github.com/evmos/ethermint/x/evm/statedb"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
PrecompileAddress = "0x0000000000000000000000000000000000001000"
|
||||||
|
|
||||||
|
RequiredGasMax uint64 = 1000_000_000
|
||||||
|
|
||||||
|
DASignersFunctionEpochNumber = "epochNumber"
|
||||||
|
DASignersFunctionQuorumCount = "quorumCount"
|
||||||
|
DASignersFunctionGetSigner = "getSigner"
|
||||||
|
DASignersFunctionGetQuorum = "getQuorum"
|
||||||
|
DASignersFunctionGetQuorumRow = "getQuorumRow"
|
||||||
|
DASignersFunctionRegisterSigner = "registerSigner"
|
||||||
|
DASignersFunctionUpdateSocket = "updateSocket"
|
||||||
|
DASignersFunctionRegisterNextEpoch = "registerNextEpoch"
|
||||||
|
DASignersFunctionGetAggPkG1 = "getAggPkG1"
|
||||||
|
DASignersFunctionIsSigner = "isSigner"
|
||||||
|
DASignersFunctionRegisteredEpoch = "registeredEpoch"
|
||||||
|
)
|
||||||
|
|
||||||
|
var RequiredGasBasic = map[string]uint64{
|
||||||
|
DASignersFunctionEpochNumber: 1000,
|
||||||
|
DASignersFunctionQuorumCount: 1000,
|
||||||
|
DASignersFunctionGetSigner: 100000,
|
||||||
|
DASignersFunctionGetQuorum: 100000,
|
||||||
|
DASignersFunctionGetQuorumRow: 10000,
|
||||||
|
DASignersFunctionRegisterSigner: 100000,
|
||||||
|
DASignersFunctionUpdateSocket: 50000,
|
||||||
|
DASignersFunctionRegisterNextEpoch: 100000,
|
||||||
|
DASignersFunctionGetAggPkG1: 1000000,
|
||||||
|
DASignersFunctionIsSigner: 10000,
|
||||||
|
DASignersFunctionRegisteredEpoch: 10000,
|
||||||
|
}
|
||||||
|
|
||||||
|
var KVGasConfig storetypes.GasConfig = storetypes.GasConfig{
|
||||||
|
HasCost: 0,
|
||||||
|
DeleteCost: 0,
|
||||||
|
ReadCostFlat: 0,
|
||||||
|
ReadCostPerByte: 0,
|
||||||
|
WriteCostFlat: 0,
|
||||||
|
WriteCostPerByte: 0,
|
||||||
|
IterNextCostFlat: 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ vm.PrecompiledContract = &DASignersPrecompile{}
|
||||||
|
|
||||||
|
type DASignersPrecompile struct {
|
||||||
|
abi abi.ABI
|
||||||
|
dasignersKeeper dasignerskeeper.Keeper
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewDASignersPrecompile(dasignersKeeper dasignerskeeper.Keeper) (*DASignersPrecompile, error) {
|
||||||
|
abi, err := abi.JSON(strings.NewReader(DASignersABI))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &DASignersPrecompile{
|
||||||
|
abi: abi,
|
||||||
|
dasignersKeeper: dasignersKeeper,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Address implements vm.PrecompiledContract.
|
||||||
|
func (d *DASignersPrecompile) Address() common.Address {
|
||||||
|
return common.HexToAddress(PrecompileAddress)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RequiredGas implements vm.PrecompiledContract.
|
||||||
|
func (d *DASignersPrecompile) RequiredGas(input []byte) uint64 {
|
||||||
|
method, err := d.abi.MethodById(input[:4])
|
||||||
|
if err != nil {
|
||||||
|
return RequiredGasMax
|
||||||
|
}
|
||||||
|
if gas, ok := RequiredGasBasic[method.Name]; ok {
|
||||||
|
return gas
|
||||||
|
}
|
||||||
|
return RequiredGasMax
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run implements vm.PrecompiledContract.
|
||||||
|
func (d *DASignersPrecompile) Run(evm *vm.EVM, contract *vm.Contract, readonly bool) ([]byte, error) {
|
||||||
|
// parse input
|
||||||
|
if len(contract.Input) < 4 {
|
||||||
|
return nil, vm.ErrExecutionReverted
|
||||||
|
}
|
||||||
|
method, err := d.abi.MethodById(contract.Input[:4])
|
||||||
|
if err != nil {
|
||||||
|
return nil, vm.ErrExecutionReverted
|
||||||
|
}
|
||||||
|
args, err := method.Inputs.Unpack(contract.Input[4:])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
// get state db and context
|
||||||
|
stateDB, ok := evm.StateDB.(*statedb.StateDB)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf(precopmiles_common.ErrGetStateDB)
|
||||||
|
}
|
||||||
|
ctx := stateDB.GetContext()
|
||||||
|
// reset gas config
|
||||||
|
ctx = ctx.WithKVGasConfig(KVGasConfig)
|
||||||
|
initialGas := ctx.GasMeter().GasConsumed()
|
||||||
|
|
||||||
|
var bz []byte
|
||||||
|
switch method.Name {
|
||||||
|
// queries
|
||||||
|
case DASignersFunctionEpochNumber:
|
||||||
|
bz, err = d.EpochNumber(ctx, evm, method, args)
|
||||||
|
case DASignersFunctionQuorumCount:
|
||||||
|
bz, err = d.QuorumCount(ctx, evm, method, args)
|
||||||
|
case DASignersFunctionGetSigner:
|
||||||
|
bz, err = d.GetSigner(ctx, evm, method, args)
|
||||||
|
case DASignersFunctionGetQuorum:
|
||||||
|
bz, err = d.GetQuorum(ctx, evm, method, args)
|
||||||
|
case DASignersFunctionGetQuorumRow:
|
||||||
|
bz, err = d.GetQuorumRow(ctx, evm, method, args)
|
||||||
|
case DASignersFunctionGetAggPkG1:
|
||||||
|
bz, err = d.GetAggPkG1(ctx, evm, method, args)
|
||||||
|
case DASignersFunctionIsSigner:
|
||||||
|
bz, err = d.IsSigner(ctx, evm, method, args)
|
||||||
|
case DASignersFunctionRegisteredEpoch:
|
||||||
|
bz, err = d.RegisteredEpoch(ctx, evm, method, args)
|
||||||
|
// txs
|
||||||
|
case DASignersFunctionRegisterSigner:
|
||||||
|
bz, err = d.RegisterSigner(ctx, evm, stateDB, method, args)
|
||||||
|
case DASignersFunctionRegisterNextEpoch:
|
||||||
|
bz, err = d.RegisterNextEpoch(ctx, evm, stateDB, method, args)
|
||||||
|
case DASignersFunctionUpdateSocket:
|
||||||
|
bz, err = d.UpdateSocket(ctx, evm, stateDB, method, args)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
cost := ctx.GasMeter().GasConsumed() - initialGas
|
||||||
|
|
||||||
|
if !contract.UseGas(cost) {
|
||||||
|
return nil, vm.ErrOutOfGas
|
||||||
|
}
|
||||||
|
return bz, nil
|
||||||
|
}
|
5
precompiles/dasigners/errors.go
Normal file
5
precompiles/dasigners/errors.go
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package dasigners
|
||||||
|
|
||||||
|
const (
|
||||||
|
ErrInvalidSender = "sender address %s is not the same as signer address %s"
|
||||||
|
)
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user