From d78d6c64302a06db2cbef9ac13dd18f576cbe054 Mon Sep 17 00:00:00 2001 From: Will Meister Date: Wed, 1 Apr 2020 14:25:03 -0500 Subject: [PATCH] Adding hardcoded PK parameter in geth that flows through to l2-rpc-server. Added a lot more introspection l2-rpc-server startup and during tx execution, added info on the PK expected to be used by everything in constants.ts --- docker-compose.yml | 4 ++++ docker/geth/entrypoint.sh | 13 +++++++++++-- packages/integration-test-utils/src/constants.ts | 4 +++- packages/ovm/src/app/utils.ts | 8 ++++++++ .../rollup-full-node/src/app/utils/environment.ts | 3 +++ packages/rollup-full-node/src/app/utils/l2-node.ts | 12 +++++++++--- .../rollup-full-node/src/app/web3-rpc-handler.ts | 7 +++++-- 7 files changed, 43 insertions(+), 8 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index e15504d054ae..f4ed3f979c84 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,6 +23,7 @@ services: - L2_TO_L1_MESSAGE_FINALITY_DELAY_IN_BLOCKS - L2_RPC_SERVER_HOST - L2_RPC_SERVER_PORT + - L2_WALLET_PRIVATE_KEY - L2_WALLET_MNEMONIC - L2_WALLET_PRIVATE_KEY_PATH=/mnt/l2-node/private_key.txt - LOCAL_L1_NODE_PORT @@ -42,6 +43,7 @@ services: - HOSTNAME=geth_l2 - PORT=9545 - NETWORK_ID=108 + - PRIVATE_KEY=0x29f3edee0ad3abf8e2699402e0e28cd6492c9be7eaab00d732a791c33552f797 - KEYSTORE_PATH_SUFFIX=/keystore - SEALER_PRIVATE_KEY_PATH_SUFFIX=/sealer_private_key.txt - PRIVATE_KEY_PATH_SUFFIX=/private_key.txt @@ -52,6 +54,8 @@ services: - SETUP_RUN_PATH_SUFFIX=/setup_run.txt expose: - "9545" + ports: + - 9545:9545 # # geth_l1: # volumes: diff --git a/docker/geth/entrypoint.sh b/docker/geth/entrypoint.sh index b2f8fc06ccea..0499b531e1d5 100644 --- a/docker/geth/entrypoint.sh +++ b/docker/geth/entrypoint.sh @@ -48,10 +48,19 @@ generate_geneisis() ## One-time configuration to be run only on first startup if [[ ! -f $KEYSTORE_PATH && ! -f $SETUP_RUN_PATH ]]; then - generate_private_key > $SEALER_PRIVATE_KEY_PATH + generate_private_key > $SEALER_PRIVATE_KEY_PATH import_private_key $SEALER_PRIVATE_KEY_PATH > $SEALER_ADDRESS_PATH - generate_private_key > $PRIVATE_KEY_PATH + + if [ -z "$PRIVATE_KEY" ]; then + echo "\nGENERATING PRIVATE KEY!! We most likely don't want to do this.\n" + generate_private_key > $PRIVATE_KEY_PATH + else + echo "Reading private key from env" + echo "$PRIVATE_KEY" | sed 's/^0x//' > $PRIVATE_KEY_PATH + fi + import_private_key $PRIVATE_KEY_PATH > $ADDRESS_PATH + generate_geneisis `cat $SEALER_ADDRESS_PATH` `cat $ADDRESS_PATH` geth --datadir $VOLUME_PATH --nousb --verbosity 0 init $GENISIS_PATH 2> /dev/null; diff --git a/packages/integration-test-utils/src/constants.ts b/packages/integration-test-utils/src/constants.ts index 8dd163afa207..ffb6021703d4 100644 --- a/packages/integration-test-utils/src/constants.ts +++ b/packages/integration-test-utils/src/constants.ts @@ -1,2 +1,4 @@ - +// Default Wallet PK: 0x29f3edee0ad3abf8e2699402e0e28cd6492c9be7eaab00d732a791c33552f797 +// Default Wallet address: 0x17ec8597ff92C3F44523bDc65BF0f1bE632917ff +// Default EM Address is 1st deployment from the above Wallet export const EXECUTION_MANAGER_ADDRESS = process.env.EXECUTION_MANAGER_ADDRESS || '0xA193E42526F1FEA8C99AF609dcEabf30C1c29fAA' \ No newline at end of file diff --git a/packages/ovm/src/app/utils.ts b/packages/ovm/src/app/utils.ts index 5e9f8e503bbe..4e9e828eee02 100644 --- a/packages/ovm/src/app/utils.ts +++ b/packages/ovm/src/app/utils.ts @@ -42,6 +42,7 @@ export const l2ToL1MessagePasserInterface = new ethers.utils.Interface( ) const logger = getLogger('utils') + export interface OvmTransactionMetadata { ovmTxSucceeded: boolean ovmTo: string @@ -68,8 +69,15 @@ export const convertInternalLogsToOvmLogs = (logs: Log[]): Log[] => { if (executionManagerLog) { if (executionManagerLog.name === 'ActiveContract') { activeContract = executionManagerLog.values['_activeContract'] + } else { + logger.debug( + `${ + executionManagerLog.name + }, values: ${JSON.stringify(executionManagerLog.values)}` + ) } } else { + logger.debug(`Non-EM log: ${JSON.stringify(log)}`) ovmLogs.push({ ...log, address: activeContract }) } }) diff --git a/packages/rollup-full-node/src/app/utils/environment.ts b/packages/rollup-full-node/src/app/utils/environment.ts index c49cc3e941e8..faaa5c3d175c 100644 --- a/packages/rollup-full-node/src/app/utils/environment.ts +++ b/packages/rollup-full-node/src/app/utils/environment.ts @@ -37,6 +37,9 @@ export class Environment { public static l2NodeWeb3Url(defaultValue?: string): string { return process.env.L2_NODE_WEB3_URL || defaultValue } + public static l2WalletPrivateKey(defaultValue?: string): string { + return process.env.L2_WALLET_PRIVATE_KEY || defaultValue + } public static l2WalletMnemonic(defaultValue?: string): string { return process.env.L2_WALLET_MNEMONIC || defaultValue } diff --git a/packages/rollup-full-node/src/app/utils/l2-node.ts b/packages/rollup-full-node/src/app/utils/l2-node.ts index 1248e8427a97..a7791d433d0b 100644 --- a/packages/rollup-full-node/src/app/utils/l2-node.ts +++ b/packages/rollup-full-node/src/app/utils/l2-node.ts @@ -1,9 +1,9 @@ /* Externals Import */ import { + add0x, getDeployedContractAddress, getLogger, logError, - remove0x, } from '@eth-optimism/core-utils' import { GAS_LIMIT, @@ -95,15 +95,20 @@ function deployLocalL2Node(): JsonRpcProvider { */ function getL2Wallet(provider: JsonRpcProvider): Wallet { let wallet: Wallet - if (!!Environment.l2WalletMnemonic()) { + if (!!Environment.l2WalletPrivateKey()) { + wallet = new Wallet(add0x(Environment.l2WalletPrivateKey()), provider) + log.info(`Initialized wallet from private key. Address: ${wallet.address}`) + } else if (!!Environment.l2WalletMnemonic()) { wallet = Wallet.fromMnemonic(Environment.l2WalletMnemonic()) wallet.connect(provider) + log.info(`Initialized wallet from mnemonic. Address: ${wallet.address}`) } else if (!!Environment.l2WalletPrivateKeyPath()) { try { const pk: string = fs.readFileSync(Environment.l2WalletPrivateKeyPath(), { encoding: 'utf-8', }) - wallet = new Wallet(pk, provider) + wallet = new Wallet(add0x(pk.trim()), provider) + log.info(`Found wallet from PK file. Address: ${wallet.address}`) } catch (e) { logError( log, @@ -114,6 +119,7 @@ function getL2Wallet(provider: JsonRpcProvider): Wallet { } } else { wallet = getWallets(provider)[0] + log.info(`Getting wallet from provider. First wallet private key: [${wallet.privateKey}`) } if (!wallet) { diff --git a/packages/rollup-full-node/src/app/web3-rpc-handler.ts b/packages/rollup-full-node/src/app/web3-rpc-handler.ts index f19bbfcaecec..59a8d4545495 100644 --- a/packages/rollup-full-node/src/app/web3-rpc-handler.ts +++ b/packages/rollup-full-node/src/app/web3-rpc-handler.ts @@ -56,6 +56,7 @@ export class DefaultWeb3Handler implements Web3Handler, FullnodeHandler { messageSubmitter: L2ToL1MessageSubmitter = new NoOpL2ToL1MessageSubmitter(), web3Provider?: JsonRpcProvider ): Promise { + log.info(`Creating Web3 Handler with provider: ${!!web3Provider ? web3Provider.connection.url : 'undefined -- will create.'}`) const l2NodeContext: L2NodeContext = await initializeL2Node(web3Provider) return new DefaultWeb3Handler(messageSubmitter, l2NodeContext) @@ -363,7 +364,7 @@ export class DefaultWeb3Handler implements Web3Handler, FullnodeHandler { } log.debug( - `Returning tx receipt for ovm tx hash [${ovmTxHash}]: [${internalTxReceipt}]` + `Returning tx receipt for ovm tx hash [${ovmTxHash}]: [${JSON.stringify(internalTxReceipt)}]` ) return ovmTxReceipt } @@ -396,6 +397,8 @@ export class DefaultWeb3Handler implements Web3Handler, FullnodeHandler { const ovmTxHash = await utils.keccak256(rawOvmTx) const internalTxHash = await utils.keccak256(internalTx) + log.debug(`\n\n\nSIGNED INTERNAL TX: ${JSON.stringify(internalTx)}\n\n\n`) + // Make sure we have a way to look up our internal tx hash from the ovm tx hash. await this.mapOvmTxHashToInternalTxHash(ovmTxHash, internalTxHash) @@ -404,7 +407,7 @@ export class DefaultWeb3Handler implements Web3Handler, FullnodeHandler { // Then apply our transaction returnedInternalTxHash = await this.context.provider.send( Web3RpcMethods.sendRawTransaction, - internalTx + [internalTx] ) } catch (e) { logError(