Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: merge dev into main #378

Merged
merged 96 commits into from
Sep 5, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
bcafeda
feat(contracts): add arctangent library
sm-stack Mar 8, 2024
7bc46e5
feat(contracts): add AssetManager contract
sm-stack Mar 8, 2024
34a2700
feat(contracts): add interface for KGHManager contract
sm-stack Mar 8, 2024
15e0c7f
feat(contracts): add test codes for AssetManager
sm-stack Mar 8, 2024
cef7a30
feat(contracts): add Uint128Math library
sm-stack Mar 11, 2024
a726010
feat(contracts): add balanced weight tree library
seolaoh Mar 11, 2024
1c9e2ad
fix(contracts): check correct minimum timestamp for next output submi…
seolaoh Feb 28, 2024
62c9912
feat(contracts): add `ValidatorManager` contract and refac `AssetMana…
seolaoh Mar 29, 2024
0cb9f85
feat(contracts): handle validator system upgrade in `L2OutputOracle`
seolaoh Mar 18, 2024
208cd2a
feat(chain-ops): apply changes with `AssetManager` and `ValidatorMana…
seolaoh Mar 27, 2024
0108d07
chore(contracts): update bindings and snapshots
seolaoh Mar 29, 2024
c39f2da
feat(contracts): apply PR reviews
seolaoh Apr 18, 2024
a96e0a2
feat(contracts): upgrade validator system in `Colosseum`
seolaoh Apr 17, 2024
dbed8b6
refac(contracts): replace all errors with custom error in `Colosseum`
seolaoh Apr 17, 2024
1a693d3
feat(contracts): send the challenge loser to jail when slashing
seolaoh Apr 18, 2024
0d94687
refac(contracts): move interfaces to separate folder
seolaoh Apr 18, 2024
85f26e8
refac(contracts): add `IAssetManager`
seolaoh Apr 18, 2024
d30a495
test(contracts): modify tests related to slashing
seolaoh Apr 19, 2024
edf7208
test(contracts): add tests for validator system upgrade in `Colosseum`
seolaoh Apr 21, 2024
9d1bfff
chore(contracts): update bindings and snapshots
seolaoh Apr 21, 2024
16802c3
feat(contracts): apply PR reviews
seolaoh Apr 23, 2024
2511cbc
feat(validator): add logics for new validator system
sm-stack Apr 2, 2024
852e5b8
feat(e2e): add action tests for new validator system
sm-stack Apr 2, 2024
0c05940
chore: set required flags for devnet
sm-stack Apr 17, 2024
02d5012
fix(validator): add real-time update logic for terminate index of Val…
sm-stack Apr 21, 2024
333f513
fix(contracts): fix ValidatorPool to check termination by index
sm-stack Apr 22, 2024
95665a2
fix(validator): remove inJail status in the validator client
sm-stack Apr 22, 2024
8169f41
feat(validator): apply PR Reviews
sm-stack Apr 23, 2024
85c9784
feat(validator): add subcommands for the new validator system
sm-stack Apr 17, 2024
845b217
feat(validator): add flags used in subcommands
sm-stack Apr 23, 2024
8a5d782
docs(validator): add README for subcommands
sm-stack Apr 24, 2024
a5a8009
feat(validator): add PR reviews
sm-stack Apr 24, 2024
7142220
fix(validator): fix subcommand related changes
seolaoh May 2, 2024
6bfa308
test(validator): redeploy `ValidatorPool` to test `ValidatorManager`
seolaoh May 3, 2024
c99be8b
refac(validator): reorder functions of l2_validator
seolaoh May 7, 2024
2195eca
test(validator): add challenger actions test for `ValidatorManager`
seolaoh May 7, 2024
3d8e78b
refac(validator): reorder functions of l2_challenger_test
seolaoh May 7, 2024
80817d4
refac(validator): add runtime functions to use in validator actions test
seolaoh May 8, 2024
06bff6d
refac(validator): reorder functions of l2_runtime
seolaoh May 8, 2024
64592da
test(validator): apply PR reviews
seolaoh May 9, 2024
46cc561
Merge branch 'refs/heads/dev' into feat/implement-validator-system-v2
seolaoh May 10, 2024
6ce71fb
feat(validator): modify guardian to handle challenger timeout (#320)
seolaoh May 17, 2024
c6cce6f
feat(contracts): support validator system V2 from genesis (#322)
seolaoh May 21, 2024
7f91022
test(e2e): add tests about validator system V2 (#323)
seolaoh May 27, 2024
9c41722
fix: remove validator from tree when sending to jail (#325)
seolaoh May 29, 2024
9c507ba
fix(contracts): fix some bugs related to `AssetManager` (#327)
seolaoh Jun 5, 2024
1474ae4
fix(validator): change challenger and guardian scan until head L1 (#330)
seolaoh Jun 5, 2024
7359dbe
Merge branch 'refs/heads/dev' into feat/implement-validator-system-v2
seolaoh Jun 7, 2024
436423b
feat: implement governance token minting and distribution (#333)
seolaoh Jun 24, 2024
bf3eee2
feat(contracts): increase share unit of `MintManager` (#334)
seolaoh Jun 25, 2024
0e7487f
feat(contracts): implement vesting wallet (#335)
seolaoh Jul 2, 2024
acee3f3
feat: apply audit results about token minting and distribution (#336)
seolaoh Jul 2, 2024
38772d2
Merge branch 'refs/heads/dev' into feat/implement-validator-system-v2
seolaoh Jul 3, 2024
0fdc7c0
chore: update artifact of ZKVerifier contract for v1.4.3 on Kroma Mai…
0xHansLee Jul 4, 2024
14047a3
feat: deploy `GovernanceToken` using normal proxy for devnet
seolaoh Jul 4, 2024
cce60b9
chore(contracts): add token deployments for Sepolia, Kroma Sepolia (#…
seolaoh Jul 9, 2024
1bdf77d
chore(contracts): add token deployments for Ethereum, Kroma (#339)
seolaoh Jul 9, 2024
6db98fc
chore(contracts): update `MintManager` deployment for Ethereum (#340)
seolaoh Jul 9, 2024
481160e
Merge remote-tracking branch 'origin/dev' into feat/implement-validat…
seolaoh Jul 12, 2024
0247393
feat(contracts): apply audit results about vesting wallet (#342)
seolaoh Jul 12, 2024
45760b5
feat(contracts): add withdraw account to validator (#343)
0xHansLee Jul 15, 2024
b9c706a
feat: add delay of commission rate change (#345)
seolaoh Jul 17, 2024
99e6a68
feat(contracts): separate validator kro from delegation pool (#344)
0xHansLee Jul 17, 2024
104b313
feat(contracts): fix interface of `ValidatorManager`, `AssetManager` …
seolaoh Jul 18, 2024
a7529b0
feat(contracts): bond validator KRO (#347)
seolaoh Jul 19, 2024
6e0ec89
feat: implement claimKghReward function (#348)
sm-stack Jul 19, 2024
bf82155
feat: remove KGH share and modify KGH delegation func (#349)
0xHansLee Jul 19, 2024
ceedcb0
feat(contracts): separate jail period (#352)
sm-stack Jul 22, 2024
b5b2ec9
feat(contracts): unbond validator KRO (#351)
seolaoh Jul 22, 2024
627c070
feat(contracts): add transferFrom when increasing reward of vault (#354)
sm-stack Jul 22, 2024
7abe40c
feat(contracts): update validator reward calculation (#355)
sm-stack Jul 22, 2024
8eab79f
feat(contracts): implement 1-step undelegation of KRO (#350)
0xHansLee Jul 22, 2024
e0f36b0
feat(contracts): implement 1-step undelegation for KGH (#353)
0xHansLee Jul 23, 2024
b7dd902
chore: remove 2 step claim of validator reward. (#356)
0xHansLee Jul 23, 2024
f8bbed7
feat(contracts): remove KRO in KGH (#358)
seolaoh Jul 23, 2024
0b00b05
feat(contracts): add withdraw method for validator (#357)
sm-stack Jul 23, 2024
3f0e5ec
test(contracts): setup for `AssetManager` and `ValidatorManager` (#359)
seolaoh Jul 23, 2024
2ec4403
docs: rectify typographical inaccuracies (#337)
nnsW3 Jul 23, 2024
c0c77dd
test(contracts): add `AssetManager` tests (#361)
seolaoh Jul 25, 2024
c77accc
feat: change validator client subcommands (#360)
sm-stack Jul 25, 2024
01f14c6
feat: modify validator client for validator system V2 (#362)
sm-stack Jul 26, 2024
b70a4e3
test(contracts): modify `Colosseum` tests related to V2 (#363)
seolaoh Jul 26, 2024
1c302b5
test: fix validator manager contract tests (#364)
0xHansLee Jul 26, 2024
042efa8
feat(contracts): modify deploy scripts (#365)
seolaoh Jul 30, 2024
5583cf9
test(validator): modify e2e tests related to V2 (#366)
seolaoh Jul 30, 2024
ab37de4
feat(contracts): auto activate validator when deposit (#367)
seolaoh Jul 31, 2024
aca9645
fix(validator): modify validator to be able to turn on without V2 (#368)
seolaoh Aug 1, 2024
f885f5f
fix(validator): disable validator to be turned on without V2 (#369)
seolaoh Aug 2, 2024
96aec79
fix(contracts): avoid overflow error during calculating output reward…
seolaoh Aug 2, 2024
bc896c5
fix(contracts): not upgrade already deployed contract (#371)
seolaoh Aug 8, 2024
4f5570d
feat(contracts): apply audit results (#373)
seolaoh Aug 22, 2024
75ae796
Merge branch 'refs/heads/dev' into feat/implement-validator-system-v2
seolaoh Aug 23, 2024
87fc8ab
Merge pull request #374 from kroma-network/feat/implement-validator-s…
seolaoh Aug 23, 2024
b83718c
fix(contracts): update jail expiration timestamp correctly (#376)
seolaoh Sep 2, 2024
0750a8b
ci: fix sdk build failure (#377)
seolaoh Sep 3, 2024
ef70f38
chore: create funding.json
0xHansLee Sep 4, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
feat: implement governance token minting and distribution (#333)
* feat(contracts): implement governance token minting and distribution

* test(e2e): mint in e2e setup and add enable governance token bridge test

* ci(e2e): enable parallel

* chore(contracts): add GovernanceTokenProxy deployments of Kroma and KromaSepolia

* fix(hardhat-deploy-config): correct env variable and companion networks

* feat: deploy `GovernanceTokenProxy` using `CREATE2` to use deterministic address

* feat: apply PR reviews

* feat(contracts): disable initialize in `GovernanceToken` constructor
  • Loading branch information
seolaoh authored Jun 24, 2024
commit 436423be4a1159cd389f4edc64e2b802972885e2
3 changes: 1 addition & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,5 @@ jobs:

- name: Run tests
env:
OP_E2E_DISABLE_PARALLEL: true
OP_E2E_USE_CANYON: true
OP_E2E_DISABLE_PARALLEL: false
run: make test
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ test:
go test ./kroma-bindings/...
go test ./kroma-chain-ops/...
go test ./kroma-validator/...
go test ./op-e2e/... -timeout 30m # requires a minimum of 30min in a CI
go test ./op-e2e/... -timeout 30m # a maximum of 30min in a CI
pnpm test
.PHONY: test

Expand Down
1 change: 1 addition & 0 deletions kroma-bindings/artifacts.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"L2OutputOracle",
"L2StandardBridge",
"L2ToL1MessagePasser",
"MintManager",
"ProtocolVault",
"Proxy",
"ProxyAdmin",
Expand Down
403 changes: 392 additions & 11 deletions kroma-bindings/bindings/governancetoken.go

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions kroma-bindings/bindings/governancetoken_more.go

Large diffs are not rendered by default.

699 changes: 699 additions & 0 deletions kroma-bindings/bindings/mintmanager.go

Large diffs are not rendered by default.

27 changes: 27 additions & 0 deletions kroma-bindings/bindings/mintmanager_more.go

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

1 change: 1 addition & 0 deletions kroma-bindings/bindings/zkverifier_more.go

Large diffs are not rendered by default.

6 changes: 2 additions & 4 deletions kroma-bindings/predeploys/addresses.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ const (
L2ERC721Bridge = "0x420000000000000000000000000000000000000A"
KromaMintableERC20Factory = "0x420000000000000000000000000000000000000B"
KromaMintableERC721Factory = "0x420000000000000000000000000000000000000C"
GovernanceToken = "0x42000000000000000000000000000000000000FF"
Create2Deployer = "0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2"
MultiCall3 = "0xcA11bde05977b3631167028862bE2a173976CA11"
Safe_v130 = "0x69f4D1788e39c87893C980c06EdF4b7f686e2938"
Expand All @@ -45,7 +44,6 @@ var (
L1FeeVaultAddr = common.HexToAddress(L1FeeVault)
ValidatorRewardVaultAddr = common.HexToAddress(ValidatorRewardVault)
L2StandardBridgeAddr = common.HexToAddress(L2StandardBridge)
GovernanceTokenAddr = common.HexToAddress(GovernanceToken)
L2ERC721BridgeAddr = common.HexToAddress(L2ERC721Bridge)
KromaMintableERC20FactoryAddr = common.HexToAddress(KromaMintableERC20Factory)
KromaMintableERC721FactoryAddr = common.HexToAddress(KromaMintableERC721Factory)
Expand Down Expand Up @@ -89,15 +87,15 @@ func init() {
Predeploys["L1FeeVault"] = &oppredeploys.Predeploy{Address: L1FeeVaultAddr}
Predeploys["ValidatorRewardVault"] = &oppredeploys.Predeploy{Address: ValidatorRewardVaultAddr}
Predeploys["L2StandardBridge"] = &oppredeploys.Predeploy{Address: L2StandardBridgeAddr}
/* [Kroma: START]
Predeploys["GovernanceToken"] = &oppredeploys.Predeploy{
Address: GovernanceTokenAddr,
/* [Kroma: START]
ProxyDisabled: true,
*/
Enabled: func(config oppredeploys.DeployConfig) bool {
return config.GovernanceEnabled()
},
}
*/
Predeploys["L2ERC721Bridge"] = &oppredeploys.Predeploy{Address: L2ERC721BridgeAddr}
Predeploys["KromaMintableERC20Factory"] = &oppredeploys.Predeploy{Address: KromaMintableERC20FactoryAddr}
Predeploys["KromaMintableERC721Factory"] = &oppredeploys.Predeploy{Address: KromaMintableERC721FactoryAddr}
Expand Down
81 changes: 53 additions & 28 deletions kroma-chain-ops/genesis/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,16 @@ import (
"reflect"
"strings"

"github.com/ethereum-optimism/optimism/op-chain-ops/state"
"github.com/ethereum-optimism/optimism/op-node/rollup"
"github.com/ethereum-optimism/optimism/op-service/eth"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
gstate "github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/rpc"

"github.com/ethereum-optimism/optimism/op-chain-ops/state"
"github.com/ethereum-optimism/optimism/op-node/rollup"
"github.com/ethereum-optimism/optimism/op-service/eth"
"github.com/kroma-network/kroma/kroma-bindings/predeploys"
"github.com/kroma-network/kroma/kroma-chain-ops/immutables"
)
Expand Down Expand Up @@ -155,13 +155,31 @@ type DeployConfig struct {
GasPriceOracleScalar uint64 `json:"gasPriceOracleScalar"`
// EnableGovernance configures whether or not include governance token predeploy.
EnableGovernance bool `json:"enableGovernance"`
/* [Kroma: START]
// GovernanceTokenSymbol represents the ERC20 symbol of the GovernanceToken.
GovernanceTokenSymbol string `json:"governanceTokenSymbol"`
// GovernanceTokenName represents the ERC20 name of the GovernanceToken
GovernanceTokenName string `json:"governanceTokenName"`
// GovernanceTokenOwner represents the owner of the GovernanceToken. Has the ability
// to mint and burn tokens.
GovernanceTokenOwner common.Address `json:"governanceTokenOwner"`
[Kroma: END] */
// [Kroma: START]
// GovernanceTokenAddress represents GovernanceToken address on L2.
GovernanceTokenAddress common.Address `json:"governanceTokenAddress,omitempty"`
// GovernanceTokenProxySalt is used to determine GovernanceTokenProxy address on L1 and L2.
GovernanceTokenProxySalt common.Hash `json:"governanceTokenProxySalt"`
// MintManagerOwner represents the owner of the MintManager on L1 and L2. Has the ability to mint initially.
MintManagerOwner common.Address `json:"mintManagerOwner"`
// L1MintManagerRecipients is an array of recipient addresses to receive the minted governance tokens on L1.
L1MintManagerRecipients []common.Address `json:"l1MintManagerRecipients"`
// L1MintManagerShares is an array of each recipient's share of total minted tokens on L1.
L1MintManagerShares []uint64 `json:"l1MintManagerShares"`
// L2MintManagerRecipients is an array of recipient addresses to receive the minted governance tokens on L2.
L2MintManagerRecipients []common.Address `json:"l2MintManagerRecipients"`
// L2MintManagerShares is an array of each recipient's share of total minted tokens on L2.
L2MintManagerShares []uint64 `json:"l2MintManagerShares"`
// [Kroma: END]
// DeploymentWaitConfirmations is the number of confirmations to wait during
// deployment. This is DEPRECATED and should be removed in a future PR.
DeploymentWaitConfirmations int `json:"deploymentWaitConfirmations"`
Expand Down Expand Up @@ -283,9 +301,6 @@ type DeployConfig struct {
ZKVerifierHashScalar *hexutil.Big `json:"zkVerifierHashScalar"`
ZKVerifierM56Px *hexutil.Big `json:"zkVerifierM56Px"`
ZKVerifierM56Py *hexutil.Big `json:"zkVerifierM56Py"`

// L1GovernanceTokenProxy represents the address of the L1GovernanceTokenProxy on L1.
L1GovernanceTokenProxy common.Address `json:"l1GovernanceTokenProxy"`
// [Kroma: END]
}

Expand Down Expand Up @@ -381,16 +396,33 @@ func (d *DeployConfig) Check() error {
return fmt.Errorf("%w: L2 genesis block base fee per gas cannot be nil", ErrInvalidDeployConfig)
}
if d.EnableGovernance {
/* [Kroma: START]
if d.GovernanceTokenName == "" {
return fmt.Errorf("%w: GovernanceToken.name cannot be empty", ErrInvalidDeployConfig)
}
if d.GovernanceTokenSymbol == "" {
return fmt.Errorf("%w: GovernanceToken.symbol cannot be empty", ErrInvalidDeployConfig)
}
if d.GovernanceTokenOwner == (common.Address{}) {
return fmt.Errorf("%w: GovernanceToken owner cannot be address(0)", ErrInvalidDeployConfig)
}
[Kroma: END] */
// [Kroma: START]
// if d.GovernanceTokenOwner == (common.Address{}) {
// return fmt.Errorf("%w: GovernanceToken owner cannot be address(0)", ErrInvalidDeployConfig)
// }
if d.MintManagerOwner == (common.Address{}) {
return fmt.Errorf("%w: MintManagerOwner cannot be address(0)", ErrInvalidDeployConfig)
}
if len(d.L1MintManagerRecipients) == 0 {
return fmt.Errorf("%w: L1MintManagerRecipients array cannot be empty", ErrInvalidDeployConfig)
}
if len(d.L1MintManagerRecipients) != len(d.L1MintManagerShares) {
return fmt.Errorf("%w: L1MintManagerRecipients and L1MintManagerShares must be the same length", ErrInvalidDeployConfig)
}
if len(d.L2MintManagerRecipients) == 0 {
return fmt.Errorf("%w: L2MintManagerRecipients array cannot be empty", ErrInvalidDeployConfig)
}
if len(d.L2MintManagerRecipients) != len(d.L2MintManagerShares) {
return fmt.Errorf("%w: L2MintManagerRecipients and L2MintManagerShares must be the same length", ErrInvalidDeployConfig)
}
// [Kroma: END]
}
// L2 block time must always be smaller than L1 block time
Expand Down Expand Up @@ -532,12 +564,6 @@ func (d *DeployConfig) CheckAddresses() error {
if d.KromaPortalProxy == (common.Address{}) {
return fmt.Errorf("%w: KromaPortalProxy cannot be address(0)", ErrInvalidDeployConfig)
}

// [Kroma: START]
if d.L1GovernanceTokenProxy == (common.Address{}) {
return fmt.Errorf("%w: L1GovernanceTokenProxy cannot be address(0)", ErrInvalidDeployConfig)
}
// [Kroma: END]
return nil
}

Expand All @@ -551,7 +577,6 @@ func (d *DeployConfig) SetDeployments(deployments *L1Deployments) {

// [Kroma: START]
d.ValidatorPoolProxy = deployments.ValidatorPoolProxy
d.L1GovernanceTokenProxy = deployments.L1GovernanceTokenProxy
// [Kroma: END]
}

Expand Down Expand Up @@ -734,7 +759,6 @@ type L1Deployments struct {
// [Kroma: START]
Colosseum common.Address `json:"Colosseum"`
ColosseumProxy common.Address `json:"ColosseumProxy"`
L1GovernanceToken common.Address `json:"L1GovernanceToken"`
L1GovernanceTokenProxy common.Address `json:"L1GovernanceTokenProxy"`
Poseidon2 common.Address `json:"Poseidon2"`
SecurityCouncil common.Address `json:"SecurityCouncil"`
Expand Down Expand Up @@ -786,6 +810,12 @@ func (d *L1Deployments) Check(deployConfig *DeployConfig) error {
name == "DataAvailabilityChallengeProxy") {
continue
}
// [Kroma: START]
// Skip contract that will be deployed later in setup
if name == "L1GovernanceTokenProxy" {
continue
}
// [Kroma: END]
if val.Field(i).Interface().(common.Address) == (common.Address{}) {
return fmt.Errorf("%s is not set", name)
}
Expand Down Expand Up @@ -942,17 +972,9 @@ func NewL2ImmutableConfig(config *DeployConfig, block *types.Block) (*immutables
GasPriceOracle: struct{}{},
L1Block: struct{}{},
/* [Kroma: START]
GovernanceToken: struct{}{},
LegacyMessagePasser: struct{}{},
[Kroma: END] */
// [Kroma: START]
GovernanceToken: struct {
Bridge common.Address
RemoteToken common.Address
}{
Bridge: predeploys.L2StandardBridgeAddr,
RemoteToken: config.L1GovernanceTokenProxy,
},
// [Kroma: END]
[Kroma: END]*/
L2ERC721Bridge: struct {
OtherBridge common.Address
Messenger common.Address
Expand All @@ -973,6 +995,7 @@ func NewL2ImmutableConfig(config *DeployConfig, block *types.Block) (*immutables
Bridge: predeploys.L2StandardBridgeAddr,
},
ProxyAdmin: struct{}{},
// [Kroma: START]
ProtocolVault: struct {
Recipient common.Address
}{
Expand Down Expand Up @@ -1062,13 +1085,15 @@ func NewL2StorageConfig(config *DeployConfig, block *types.Block) (state.Storage
"symbol": "WETH",
"decimals": 18,
}
/* [Kroma: START]
if config.EnableGovernance {
storage["GovernanceToken"] = state.StorageValues{
"_name": config.GovernanceTokenName,
"_symbol": config.GovernanceTokenSymbol,
// "_owner": config.GovernanceTokenOwner,
"_owner": config.GovernanceTokenOwner,
}
}
[Kroma: END] */
storage["ProxyAdmin"] = state.StorageValues{
"_owner": config.ProxyAdminOwner,
}
Expand Down
Loading
Loading