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(governance): bridge UDT on ARB and OP chains #13521

Merged
merged 37 commits into from Apr 5, 2024
Merged
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
a652291
add erc20 oeth bridge contract
clemsos Mar 25, 2024
5081d81
deploy script
clemsos Mar 25, 2024
a4c3b51
add fixes
clemsos Mar 26, 2024
9cab5bd
test deploymeny manifest
clemsos Mar 26, 2024
16fa589
pass signer to getErc20 helper
clemsos Mar 26, 2024
eddd6f9
add scripts
clemsos Mar 26, 2024
022350b
add optimsim sdk dep
clemsos Mar 26, 2024
335476e
better logs
clemsos Mar 26, 2024
cb40ace
balances log
clemsos Mar 26, 2024
89a74f5
scrpt to deploy bridged token on OP
clemsos Mar 27, 2024
6901fb3
delete custom bridge contract
clemsos Mar 27, 2024
1f39bfd
move deploy script to governance
clemsos Mar 27, 2024
a66bb92
remove refs to OP sepolia
clemsos Mar 27, 2024
c8936a1
cleanup gitignore
clemsos Mar 29, 2024
63a0b6d
cleanup and use values from networks package
clemsos Mar 29, 2024
5c754d8
Merge branch 'master' into oeth-l2-bridge
clemsos Mar 29, 2024
4cf77f3
arb bridge contract
clemsos Mar 29, 2024
4ef2a27
move scripts to bridge folder
clemsos Mar 29, 2024
8c9d772
Merge branch 'oeth-l2-bridge' of github.com:unlock-protocol/unlock in…
clemsos Mar 29, 2024
e44552e
arb use mainnet
clemsos Mar 29, 2024
3cb1c03
check if token already exists
clemsos Mar 29, 2024
f3f4910
add arbitrum addresses
clemsos Mar 29, 2024
8795f14
OP default to mainnet
clemsos Mar 29, 2024
2d01eba
add optimism bridged token
clemsos Mar 29, 2024
1f359be
pass correct ERC20 abi
clemsos Mar 29, 2024
7248175
deploy on base
clemsos Mar 29, 2024
f2f55b7
add base token bridge
clemsos Mar 29, 2024
4bae6d2
basic base bridge token script
clemsos Mar 29, 2024
64dc82f
Merge branch 'master' into oeth-l2-bridge
clemsos Apr 3, 2024
6fd475e
rm unwanted git ref
clemsos Apr 3, 2024
572fead
move all udt scripts to governance
clemsos Apr 3, 2024
38f8e2b
remove changes from smart-contracts folder
clemsos Apr 3, 2024
8f3ca97
unchecked sepola deployments
clemsos Apr 3, 2024
8df8e3e
deploy UDT on base sepolia
clemsos Apr 3, 2024
1ab9724
improve base script
clemsos Apr 3, 2024
ceede74
add gas estimate
clemsos Apr 4, 2024
2d8a994
Merge branch 'master' of github.com:unlock-protocol/unlock into oeth-…
clemsos Apr 5, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion governance/helpers/multisig.js
Expand Up @@ -109,7 +109,7 @@ const getMultiSigInfo = async (chainId, multisig) => {
const getProvider = async (chainId) => {
let provider
if (chainId) {
const { publicProvider } = networks[chainId]
const { provider: publicProvider } = networks[chainId]
provider = new ethers.JsonRpcProvider(publicProvider)
} else {
;({ provider } = ethers)
Expand Down
3 changes: 3 additions & 0 deletions governance/package.json
Expand Up @@ -3,6 +3,8 @@
"description": "Scripts for the management of the Unlock Protocol",
"private": true,
"dependencies": {
"@arbitrum/sdk": "3.3.3",
"@eth-optimism/sdk": "3.2.3",
"@matterlabs/hardhat-zksync-deploy": "1.1.2",
"@matterlabs/hardhat-zksync-solc": "1.1.0",
"@matterlabs/hardhat-zksync-upgradable": "1.2.4",
Expand All @@ -23,6 +25,7 @@
"@unlock-protocol/networks": "workspace:./packages/networks",
"eslint": "8.54.0",
"ethers": "6.10.0",
"ethers5": "npm:ethers@5",
"fs-extra": "11.2.0",
"hardhat": "2.20.1",
"solhint": "4.5.2",
Expand Down
95 changes: 95 additions & 0 deletions governance/scripts/deployments/OPBridgedERC20.js
@@ -0,0 +1,95 @@
/**
* Deploy a bridged ERC20 UDT token contract on Optimism networks
*
* Please edit the chain ids constant below to use
*/
const { getNetwork, getEvent } = require('@unlock-protocol/hardhat-helpers')
const { getProvider } = require('../../helpers/multisig')

const { ethers } = require('hardhat')
const fs = require('fs-extra')

// base factory address from https://docs.base.org/base-contracts/
const OptimismMintableERC20Factory = {
base: '0xf23d369d7471bD9f6487E198723eEa023389f1d4',
optimism: '0x4200000000000000000000000000000000000012',
baseSepolia: '0x4200000000000000000000000000000000000012',
}

// OP factory address
// const OP_OptimismMintableERC20Factory =

// edit default values
const L1_CHAIN_ID = 11155111 // default to (Sepolia 11155111)
const l2_CHAIN_ID = 84532 // default to (Base Sepolia 84532)

async function main({
tokenSymbol = 'UDT',
tokenName = 'UnlockDiscountToken',
factoryAddress = OptimismMintableERC20Factory.baseSepolia, // bridged erc20 factory address
l1ChainId = L1_CHAIN_ID,
l2ChainId = l2_CHAIN_ID,
} = {}) {
const { DEPLOYER_PRIVATE_KEY } = process.env
const {
name: l1Name,
unlockDaoToken: { address: l1TokenAddress },
} = await getNetwork(l1ChainId)

if (!l1TokenAddress) {
throw new Error(`Missing UDT on L1 ${l1Name}`)
}
// get l2 network info
const l2 = await getNetwork(l2ChainId)
console.log(
`Deploying bridged token from L1 (${l1Name}) ${l1TokenAddress} to L2 ${l2.name} (${l2.id})...
- token: ${l1TokenAddress} `
)

// Create the RPC providers and wallets
const { provider: l2Provider } = await getProvider(l2ChainId)
const l2Wallet = new ethers.Wallet(DEPLOYER_PRIVATE_KEY, l2Provider)

// read ABI from node_modules
const { abi: factoryAbi } = JSON.parse(
fs
.readFileSync(
'../node_modules/@eth-optimism/contracts-bedrock/deployments/mainnet/OptimismMintableERC20Factory.json'
)
.toString()
.replace(/\n/g, '')
)

// get factory contract instance
const factory = await ethers.getContractAt(
factoryAbi,
factoryAddress,
l2Wallet
)

// create bridged token
const tx = await factory.createOptimismMintableERC20(
l1TokenAddress,
tokenName,
tokenSymbol
)

// fetch info from tx
const receipt = await tx.wait()
const {
args: { localToken },
hash,
} = await getEvent(receipt, 'OptimismMintableERC20Created')

console.log(`Bridged token deployed at: ${localToken} (${hash})`)
}

// execute as standalone
if (require.main === module) {
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error)
process.exit(1)
})
}