Commit ecb5049a authored by Mark Tyneway's avatar Mark Tyneway Committed by GitHub

Merge pull request #1290 from ethereum-optimism/develop

Develop -> Master PR
parents 091c6ccd c7bc85de
---
'@eth-optimism/smock': patch
---
Adds naive support for packed storage slots
---
'@eth-optimism/l2geth': patch
---
revert rpcGasCap logic to upstream geth behavior
---
'@eth-optimism/contracts': patch
---
Make it possible to override mint & burn methods in L2StandardERC20
---
'@eth-optimism/contracts': patch
---
Add a task for setting the gas price oracle
......@@ -55,7 +55,6 @@ jobs:
run: cat packages/contracts/gas-report.txt
- name: Run codechecks
if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
working-directory: ./packages/contracts
run: yarn codechecks
env:
......
......@@ -905,7 +905,7 @@ func DoCall(ctx context.Context, b Backend, args CallArgs, blockNrOrHash rpc.Blo
}
}
// Set default gas & gas price if none were set
gas := b.GasLimit()
gas := uint64(math.MaxUint64 / 2)
if args.Gas != nil {
gas = uint64(*args.Gas)
}
......
......@@ -22,6 +22,8 @@ docker-compose \
up --build --detach
```
*Note*: This generates a large amount of log data which docker stores by default. See [Disk Usage](#disk-usage).
To start the stack with monitoring enabled, just add the metric composition file.
```
docker-compose \
......@@ -75,3 +77,33 @@ After starting up the project Grafana should be listening on http://localhost:30
Access this link and authenticate as `admin` (see #Authentication)
From the Dashboard list, select "Geth dashboard".
## Disk Usage
The logs generated are in the gigabytes per day range, so you need to be wary of disk exhaustion when running for long periods.
One way to solve this is to configure `/etc/docker/daemon.json` like this:
```json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
```
This configures log rotation with a limit of 10MB per file and storing a maximum of three files (per container). [More details on docker logging configuration](https://docs.docker.com/config/containers/logging/configure/).
You can also decrease logging by increasing polling intervals:
```env
DATA_TRANSPORT_LAYER__POLLING_INTERVAL=100
```
- [./envs/dtl.env#L7](./envs/dtl.env#L7)
```env
ROLLUP_POLL_INTERVAL_FLAG=500ms
```
- [./envs/geth.env#L8](./envs/geth.env#L8)
......@@ -49,6 +49,7 @@
"release": "yarn build && yarn changeset publish"
},
"dependencies": {
"@changesets/cli": "^2.16.0"
"@changesets/cli": "^2.16.0",
"@codechecks/client": "^0.1.11"
}
}
......@@ -39,13 +39,13 @@ contract L2StandardERC20 is IL2StandardERC20, ERC20 {
return _interfaceId == firstSupportedInterface || _interfaceId == secondSupportedInterface;
}
function mint(address _to, uint256 _amount) public override onlyL2Bridge {
function mint(address _to, uint256 _amount) public virtual override onlyL2Bridge {
_mint(_to, _amount);
emit Mint(_to, _amount);
}
function burn(address _from, uint256 _amount) public override onlyL2Bridge {
function burn(address _from, uint256 _amount) public virtual override onlyL2Bridge {
_burn(_from, _amount);
emit Burn(_from, _amount);
......
......@@ -15,6 +15,7 @@ import '@typechain/hardhat'
import '@eth-optimism/hardhat-ovm'
import './tasks/deploy'
import './tasks/l2-gasprice'
import './tasks/set-owner'
import 'hardhat-gas-reporter'
// Load environment variables from .env
......
......@@ -53,6 +53,7 @@
"@ethersproject/abstract-provider": "^5.0.8",
"@ethersproject/abstract-signer": "^5.1.0",
"@ethersproject/contracts": "^5.0.5",
"@ethersproject/hardware-wallets": "^5.4.0",
"glob": "^7.1.6"
},
"devDependencies": {
......@@ -76,19 +77,19 @@
"@types/yargs": "^16.0.1",
"@typescript-eslint/eslint-plugin": "^4.26.0",
"@typescript-eslint/parser": "^4.26.0",
"babel-eslint": "^10.1.0",
"buffer-xor": "^2.0.2",
"chai": "^4.3.1",
"copyfiles": "^2.3.0",
"directory-tree": "^2.2.7",
"dotenv": "^8.2.0",
"babel-eslint": "^10.1.0",
"eslint": "^7.27.0",
"eslint-plugin-prettier": "^3.4.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-ban": "^1.5.2",
"eslint-plugin-import": "^2.23.4",
"eslint-plugin-jsdoc": "^35.1.2",
"eslint-plugin-prefer-arrow": "^1.2.3",
"eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-react": "^7.24.0",
"eslint-plugin-unicorn": "^32.0.1",
"ethereum-waffle": "^3.3.0",
......@@ -97,21 +98,21 @@
"hardhat": "^2.2.1",
"hardhat-deploy": "^0.7.4",
"hardhat-gas-reporter": "^1.0.4",
"lint-staged": "11.0.0",
"lodash": "^4.17.20",
"merkle-patricia-tree": "^4.0.0",
"merkletreejs": "^0.2.12",
"mkdirp": "^1.0.4",
"mocha": "^8.3.0",
"prettier": "^2.2.1",
"lint-staged": "11.0.0",
"random-bytes-seed": "^1.0.3",
"rlp": "^2.2.6",
"solhint": "^3.3.6",
"solidity-coverage": "^0.7.16",
"ts-generator": "0.0.8",
"ts-node": "^9.1.1",
"typescript": "^4.2.3",
"typechain": "2.0.0",
"typescript": "^4.2.3",
"yargs": "^16.2.0"
},
"peerDependencies": {
......
/* Imports: External */
import { ethers } from 'ethers'
import { LedgerSigner } from '@ethersproject/hardware-wallets'
import { task } from 'hardhat/config'
import * as types from 'hardhat/internal/core/params/argumentTypes'
import { predeploys } from '../src/predeploys'
import { getContractFactory } from '../src/contract-defs'
task('set-owner')
.addParam('owner', 'the new oracle address', 0, types.string)
.addOptionalParam('transactionGasPrice', 'tx.gasPrice', undefined, types.int)
.addOptionalParam(
'useLedger',
'use a ledger for signing',
false,
types.boolean
)
.addOptionalParam(
'ledgerPath',
'ledger key derivation path',
ethers.utils.defaultPath,
types.string
)
.addOptionalParam(
'contractsRpcUrl',
'Sequencer HTTP Endpoint',
process.env.CONTRACTS_RPC_URL,
types.string
)
.addOptionalParam(
'contractsDeployerKey',
'Private Key',
process.env.CONTRACTS_DEPLOYER_KEY,
types.string
)
.addOptionalParam(
'contractAddress',
'Address of Ownable contract',
predeploys.OVM_GasPriceOracle,
types.string
)
.setAction(async (args, hre: any, runSuper) => {
const provider = new ethers.providers.JsonRpcProvider(args.contractsRpcUrl)
let signer: ethers.Signer
if (!args.useLedger) {
signer = new ethers.Wallet(args.contractsDeployerKey).connect(provider)
} else {
signer = new LedgerSigner(provider, 'default', args.ledgerPath)
}
const Ownable = getContractFactory('Ownable')
.attach(args.contractAddress)
.connect(provider)
const addr = await signer.getAddress()
console.log(`Using signer ${addr}`)
const owner = await Ownable.callStatic.owner()
if (owner !== addr) {
throw new Error(`Incorrect key. Owner ${owner}, Signer ${addr}`)
}
console.log(`Owner is currently ${owner.toString()}`)
console.log(`Setting owner to ${args.owner}`)
const tx = await Ownable.connect(signer).transferOwnership(
args.owner,
{ gasPrice: args.transactionGasPrice }
)
const receipt = await tx.wait()
console.log(`Success - ${receipt.transactionHash}`)
})
......@@ -98,10 +98,14 @@ export const getStorageSlots = (
ethers.BigNumber.from(slotHash).add(inputSlot.slot)
)
const slotValue = toHexString32(
`0x` + toHexString32(flat[key]).slice(2 + variableDef.offset * 2)
)
slots.push({
label: key,
hash: slotHash,
value: toHexString32(flat[key]),
value: slotValue,
})
}
......
......@@ -23,6 +23,11 @@ contract SimpleStorageGetter {
bool internal _packedA;
address internal _packedB;
// Regression for #1275.
uint256 internal __packingSpacerUnused1; // Spacer to avoid packing with the above two.
bool public booleanOne = true;
bool public booleanTwo = true;
constructor(
uint256 _inA
) {
......
......@@ -53,8 +53,7 @@ describe('smoddit', () => {
expect(await smod.getAddress()).to.equal(ret)
})
// TODO: Need to solve this with a rewrite.
it.skip('should be able to return an address in a packed storage slot', async () => {
it('should be able to return an address in a packed storage slot', async () => {
const ret = '0x558ba9b8d78713fbf768c1f8a584485B4003f43F'
await smod.smodify.put({
......@@ -170,6 +169,16 @@ describe('smoddit', () => {
expect(await smod.getAddressToAddressMapValue(key)).to.equal(val)
})
it('should be able to pack two booleans', async () => {
const ret = true
expect(await smod.booleanTwo()).to.equal(ret)
await smod.smodify.put({
booleanTwo: ret,
})
expect(await smod.booleanTwo()).to.equal(ret)
})
})
})
})
......@@ -434,6 +434,32 @@
ts-node "^8.0.2"
url-join "^4.0.0"
"@codechecks/client@^0.1.11":
version "0.1.11"
resolved "https://registry.yarnpkg.com/@codechecks/client/-/client-0.1.11.tgz#5ca0cb3b0d99fed1c397033c981efeedd8e2ea37"
integrity sha512-dSIzHnGNcXxDZtnVQEXWQHXH2v9KrpnK4mDGDxdwSu3l00rOIVwJcttj0wzx0bC0Q6gs65VsQdZH4gkanLdXOA==
dependencies:
bluebird "^3.5.3"
chalk "^2.4.2"
commander "^2.19.0"
debug "^4.1.1"
execa "^1.0.0"
glob "^7.1.3"
graceful-fs "^4.1.15"
js-yaml "^3.13.1"
json5 "^2.1.0"
lodash "^4.17.11"
marked "^0.7.0"
marked-terminal "^3.3.0"
mkdirp "^0.5.1"
ms "^2.1.1"
promise "^8.0.2"
request "^2.88.0"
request-promise "^4.2.2"
ts-essentials "^1.0.2"
ts-node "^8.0.2"
url-join "^4.0.0"
"@ensdomains/ens@^0.4.4":
version "0.4.5"
resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.5.tgz#e0aebc005afdc066447c6e22feb4eda89a5edbfc"
......@@ -753,7 +779,7 @@
"@ethersproject/properties" "^5.4.0"
"@ethersproject/transactions" "^5.4.0"
"@ethersproject/hardware-wallets@^5.0.8":
"@ethersproject/hardware-wallets@^5.0.8", "@ethersproject/hardware-wallets@^5.4.0":
version "5.4.0"
resolved "https://registry.yarnpkg.com/@ethersproject/hardware-wallets/-/hardware-wallets-5.4.0.tgz#bce275b395e26b6f50481095331157614490a473"
integrity sha512-Ea4ymm4etZoSWy93OcEGZkuVqyYdl/RjMlaXY6yQIYjsGi75sm4apbTiBA8DA9uajkv1FVakJZEBBTaVGgnBLA==
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment