Skip to content

Commit

Permalink
✅ Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
nagdahimanshu committed Jan 18, 2024
1 parent f21eab2 commit 3950db4
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 72 deletions.
85 changes: 37 additions & 48 deletions pkg/chain/chain_constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,100 +30,89 @@ var L2_CHAIN_IDS = L2ChainIDs{
}

type L1Contracts struct {
l1CrossDomainMessenger string
stateCommitmentChain string
optimismPortal string
l2OutputOracle string
stateCommitmentChain string
optimismPortal string
l2OutputOracle string
}

// GetContractAddressesByChainID returns contract addresses by chainID.
func GetContractAddressesByChainID(chainID uint64) map[string]L1Contracts {
CONTRACT_ADDRESSES := map[uint64]map[string]L1Contracts{
L2_CHAIN_IDS.OPTIMISM: {
"l1": {
l1CrossDomainMessenger: "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318",
stateCommitmentChain: "0xBe5dAb4A2e9cd0F27300dB4aB94BeE3A233AEB19",
optimismPortal: "0xbEb5Fc579115071764c7423A4f12eDde41f106Ed",
l2OutputOracle: "0xdfe97868233d1aa22e815a266982f2cf17685a27",
stateCommitmentChain: "0xBe5dAb4A2e9cd0F27300dB4aB94BeE3A233AEB19",
optimismPortal: "0xbEb5Fc579115071764c7423A4f12eDde41f106Ed",
l2OutputOracle: "0xdfe97868233d1aa22e815a266982f2cf17685a27",
},
},
L2_CHAIN_IDS.OPTIMISM_GOERLI: {
"l1": {
l1CrossDomainMessenger: "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318",
stateCommitmentChain: "0x9c945aC97Baf48cB784AbBB61399beB71aF7A378",
optimismPortal: "0x5b47E1A08Ea6d985D6649300584e6722Ec4B1383",
l2OutputOracle: "0xE6Dfba0953616Bacab0c9A8ecb3a9BBa77FC15c0",
stateCommitmentChain: "0x9c945aC97Baf48cB784AbBB61399beB71aF7A378",
optimismPortal: "0x5b47E1A08Ea6d985D6649300584e6722Ec4B1383",
l2OutputOracle: "0xE6Dfba0953616Bacab0c9A8ecb3a9BBa77FC15c0",
},
},
L2_CHAIN_IDS.OPTIMISM_SEPOLIA: {
"l1": {
l1CrossDomainMessenger: "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318",
stateCommitmentChain: "0x0000000000000000000000000000000000000000",
optimismPortal: "0x16Fc5058F25648194471939df75CF27A2fdC48BC",
l2OutputOracle: "0x90E9c4f8a994a250F6aEfd61CAFb4F2e895D458F",
stateCommitmentChain: "0x0000000000000000000000000000000000000000",
optimismPortal: "0x16Fc5058F25648194471939df75CF27A2fdC48BC",
l2OutputOracle: "0x90E9c4f8a994a250F6aEfd61CAFb4F2e895D458F",
},
},
L2_CHAIN_IDS.OPTIMISM_HARDHAT_LOCAL: {
"l1": {
l1CrossDomainMessenger: "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318",
stateCommitmentChain: "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9",
optimismPortal: "0x0000000000000000000000000000000000000000",
l2OutputOracle: "0x0000000000000000000000000000000000000000",
stateCommitmentChain: "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9",
optimismPortal: "0x0000000000000000000000000000000000000000",
l2OutputOracle: "0x0000000000000000000000000000000000000000",
},
},
L2_CHAIN_IDS.OPTIMISM_HARDHAT_DEVNET: {
"l1": {
l1CrossDomainMessenger: "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318",
stateCommitmentChain: "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9",
optimismPortal: "0x0000000000000000000000000000000000000000",
l2OutputOracle: "0x0000000000000000000000000000000000000000",
stateCommitmentChain: "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9",
optimismPortal: "0x0000000000000000000000000000000000000000",
l2OutputOracle: "0x0000000000000000000000000000000000000000",
},
},
L2_CHAIN_IDS.OPTIMISM_BEDROCK_ALPHA_TESTNET: {
"l1": {
l1CrossDomainMessenger: "0x838a6DC4E37CA45D4Ef05bb776bf05eEf50798De",
stateCommitmentChain: "0x0000000000000000000000000000000000000000",
optimismPortal: "0xA581Ca3353DB73115C4625FFC7aDF5dB379434A8",
l2OutputOracle: "0x3A234299a14De50027eA65dCdf1c0DaC729e04A6",
stateCommitmentChain: "0x0000000000000000000000000000000000000000",
optimismPortal: "0xA581Ca3353DB73115C4625FFC7aDF5dB379434A8",
l2OutputOracle: "0x3A234299a14De50027eA65dCdf1c0DaC729e04A6",
},
},
L2_CHAIN_IDS.BASE_GOERLI: {
"l1": {
l1CrossDomainMessenger: "0x8e5693140eA606bcEB98761d9beB1BC87383706D",
stateCommitmentChain: "0x0000000000000000000000000000000000000000",
optimismPortal: "0xe93c8cD0D409341205A592f8c4Ac1A5fe5585cfA",
l2OutputOracle: "0x2A35891ff30313CcFa6CE88dcf3858bb075A2298",
stateCommitmentChain: "0x0000000000000000000000000000000000000000",
optimismPortal: "0xe93c8cD0D409341205A592f8c4Ac1A5fe5585cfA",
l2OutputOracle: "0x2A35891ff30313CcFa6CE88dcf3858bb075A2298",
},
},
L2_CHAIN_IDS.BASE_SEPOLIA: {
"l1": {
l1CrossDomainMessenger: "0xC34855F4De64F1840e5686e64278da901e261f20",
stateCommitmentChain: "0x0000000000000000000000000000000000000000",
optimismPortal: "0x49f53e41452C74589E85cA1677426Ba426459e85",
l2OutputOracle: "0x84457ca9D0163FbC4bbfe4Dfbb20ba46e48DF254",
stateCommitmentChain: "0x0000000000000000000000000000000000000000",
optimismPortal: "0x49f53e41452C74589E85cA1677426Ba426459e85",
l2OutputOracle: "0x84457ca9D0163FbC4bbfe4Dfbb20ba46e48DF254",
},
},
L2_CHAIN_IDS.BASE_MAINNET: {
"l1": {
l1CrossDomainMessenger: "0x866E82a600A1414e583f7F13623F1aC5d58b0Afa",
stateCommitmentChain: "0x0000000000000000000000000000000000000000",
optimismPortal: "0x49048044D57e1C92A77f79988d21Fa8fAF74E97e",
l2OutputOracle: "0x56315b90c40730925ec5485cf004d835058518A0",
stateCommitmentChain: "0x0000000000000000000000000000000000000000",
optimismPortal: "0x49048044D57e1C92A77f79988d21Fa8fAF74E97e",
l2OutputOracle: "0x56315b90c40730925ec5485cf004d835058518A0",
},
},
L2_CHAIN_IDS.ZORA_GOERLI: {
"l1": {
l1CrossDomainMessenger: "0xD87342e16352D33170557A7dA1e5fB966a60FafC",
stateCommitmentChain: "0x0000000000000000000000000000000000000000",
optimismPortal: "0xDb9F51790365e7dc196e7D072728df39Be958ACe",
l2OutputOracle: "0xdD292C9eEd00f6A32Ff5245d0BCd7f2a15f24e00",
stateCommitmentChain: "0x0000000000000000000000000000000000000000",
optimismPortal: "0xDb9F51790365e7dc196e7D072728df39Be958ACe",
l2OutputOracle: "0xdD292C9eEd00f6A32Ff5245d0BCd7f2a15f24e00",
},
},
L2_CHAIN_IDS.ZORA_MAINNET: {
"l1": {
l1CrossDomainMessenger: "0xdC40a14d9abd6F410226f1E6de71aE03441ca506",
stateCommitmentChain: "0x0000000000000000000000000000000000000000",
optimismPortal: "0x1a0ad011913A150f69f6A19DF447A0CfD9551054",
l2OutputOracle: "0x9E6204F750cD866b299594e2aC9eA824E2e5f95c",
stateCommitmentChain: "0x0000000000000000000000000000000000000000",
optimismPortal: "0x1a0ad011913A150f69f6A19DF447A0CfD9551054",
l2OutputOracle: "0x9E6204F750cD866b299594e2aC9eA824E2e5f95c",
},
},
}
Expand Down
25 changes: 25 additions & 0 deletions pkg/chain/chain_constants_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package chain

import (
"testing"

"github.com/stretchr/testify/assert"
)

func TestGetContractAddressesByChainID(t *testing.T) {
const availableChainID uint64 = 10
var contractAddresses = GetContractAddressesByChainID(availableChainID)
var contractAddressesExpected = map[string]L1Contracts{
"l1": {
stateCommitmentChain: "0xBe5dAb4A2e9cd0F27300dB4aB94BeE3A233AEB19",
optimismPortal: "0xbEb5Fc579115071764c7423A4f12eDde41f106Ed",
l2OutputOracle: "0xdfe97868233d1aa22e815a266982f2cf17685a27",
}}

assert.Equal(t, contractAddressesExpected, contractAddresses)

const unavailableChainID uint64 = 5
contractAddresses = GetContractAddressesByChainID(unavailableChainID)

assert.Equal(t, 0, len(contractAddresses))
}
37 changes: 13 additions & 24 deletions pkg/chain/contracts.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,53 +11,41 @@ import (
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
)

// OracleContract binds oracle contract to an instance for querying data.
type OracleContract struct {
contractInstance *bindings.L2OutputOracle
log log.Logger
}

func SetContractInstance(contractInstance *bindings.L2OutputOracle, log log.Logger) (*OracleContract, error) {
return &OracleContract{
contractInstance: contractInstance,
log: log,
}, nil
}

// GetL1OracleContractAddressByChainID returns L1 oracle contract address by chainID.
func GetL1OracleContractAddressByChainID(chainID uint64) string {
ContractAddresses := GetContractAddressesByChainID(chainID)
address := ContractAddresses["l1"].l2OutputOracle
return address
}

func OracleContractInstance(client *ethclient.Client, chainID uint64, log log.Logger) (*bindings.L2OutputOracle, error) {
oracleContractAddress := GetL1OracleContractAddressByChainID(chainID)

contract, err := bindings.NewL2OutputOracle(common.HexToAddress(oracleContractAddress), client)

if err != nil {
return nil, err
}

return contract, nil
}

// CreateContractInstance return [OracleContract] with contract instance.
func CreateContractInstance(url string, chainID uint64, logger log.Logger) (*OracleContract, error) {
// CreateOracleContractInstance returns [OracleContract] with contract instance.
func CreateOracleContractInstance(url string, chainID uint64, logger log.Logger) (*OracleContract, error) {
client, err := ethclient.Dial(url)

if err != nil {
logger.Errorf("Error occurred while connecting %w", err)
return nil, err
}

contractInstance, err := OracleContractInstance(client, chainID, logger)
oracleContractAddress := GetL1OracleContractAddressByChainID(chainID)
contractInstance, err := bindings.NewL2OutputOracle(common.HexToAddress(oracleContractAddress), client)

if err != nil {
return nil, err
}

return SetContractInstance(contractInstance, logger)
return &OracleContract{
contractInstance: contractInstance,
log: logger,
}, nil
}

// GetNextOutputIndex returns index of next output to be proposed.
func (oc *OracleContract) GetNextOutputIndex() *big.Int {
nextOutputIndex, err := oc.contractInstance.NextOutputIndex(&bind.CallOpts{})

Expand All @@ -68,6 +56,7 @@ func (oc *OracleContract) GetNextOutputIndex() *big.Int {
return nextOutputIndex
}

// GetL2Output returns L2 output at given index.
func (oc *OracleContract) GetL2Output(index *big.Int) bindings.TypesOutputProposal {
l2Output, err := oc.contractInstance.GetL2Output(&bind.CallOpts{}, index)

Expand Down
19 changes: 19 additions & 0 deletions pkg/chain/contracts_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package chain

import (
"testing"

"github.com/stretchr/testify/assert"
)

func TestGetL1OracleContractAddressByChainID(t *testing.T) {
const availableChainID uint64 = 10
var contractAddresses = GetL1OracleContractAddressByChainID(availableChainID)
var oracleContractAddressesExpected = "0xdfe97868233d1aa22e815a266982f2cf17685a27"

assert.Equal(t, oracleContractAddressesExpected, contractAddresses)

const unavailableChainID uint64 = 5
contractAddresses = GetL1OracleContractAddressByChainID(unavailableChainID)
assert.Equal(t, 0, len(contractAddresses))
}

0 comments on commit 3950db4

Please sign in to comment.