Skip to content

Commit 8ca2c33

Browse files
committed
cli: handle pausers (evm)
1 parent 9001306 commit 8ca2c33

File tree

5 files changed

+31
-3
lines changed

5 files changed

+31
-3
lines changed

cli/src/evmsigner.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ export class EvmNativeSigner<N extends Network, C extends EvmChains = EvmChains>
147147
for (const txn of tx) {
148148
const { transaction, description } = txn;
149149
if (this.opts?.debug)
150-
console.log(`Signing: ${description} for ${this.address()} (tx: ${transaction.to}})`);
150+
console.log(`Signing: ${description} for ${this.address()}`);
151151

152152
const t: TransactionRequest = {
153153
...transaction,

cli/src/index.ts

+14-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import type { EvmChains } from "@wormhole-foundation/sdk-evm";
3131
import { getAvailableVersions, getGitTagName } from "./tag";
3232
import * as configuration from "./configuration";
3333

34-
// TODO: pauser (evm)
3534
// TODO: contract upgrades on solana
3635
// TODO: set special relaying?
3736
// TODO: currently, we just default all evm chains to standard relaying. should we not do that? what's a good way to configure this?
@@ -66,6 +65,7 @@ export type ChainConfig = {
6665
mode: Ntt.Mode,
6766
paused: boolean,
6867
owner: string,
68+
pauser?: string,
6969
manager: string,
7070
token: string,
7171
transceivers: {
@@ -1217,14 +1217,19 @@ async function pushDeployment<C extends Chain>(deployment: Deployment<C>, signer
12171217
const signer = await getSigner(ctx, signerType);
12181218

12191219
let txs = [];
1220+
// we perform this last to make sure we don't accidentally lock ourselves out
1221+
let updateOwner: ReturnType<typeof deployment.ntt.setOwner> | undefined = undefined;
12201222
let managerUpgrade: { from: string, to: string } | undefined;
12211223
for (const k of Object.keys(diff)) {
12221224
if (k === "version") {
12231225
// TODO: check against existing version, and make sure no major version changes
12241226
managerUpgrade = { from: diff[k]!.pull!, to: diff[k]!.push! };
12251227
} else if (k === "owner") {
12261228
const address: AccountAddress<C> = toUniversal(deployment.manager.chain, diff[k]?.push!);
1227-
txs.push(deployment.ntt.setOwner(address, signer.address.address));
1229+
updateOwner = deployment.ntt.setOwner(address, signer.address.address);
1230+
} else if (k === "pauser") {
1231+
const address: AccountAddress<C> = toUniversal(deployment.manager.chain, diff[k]?.push!);
1232+
txs.push(deployment.ntt.setPauser(address, signer.address.address));
12281233
} else if (k === "paused") {
12291234
if (diff[k]?.push === true) {
12301235
txs.push(deployment.ntt.pause(signer.address.address));
@@ -1262,6 +1267,9 @@ async function pushDeployment<C extends Chain>(deployment: Deployment<C>, signer
12621267
for (const tx of txs) {
12631268
await signSendWait(ctx, tx, signer.signer)
12641269
}
1270+
if (updateOwner) {
1271+
await signSendWait(ctx, updateOwner, signer.signer)
1272+
}
12651273
}
12661274

12671275
async function pullDeployments(deployments: Config, network: Network, verbose: boolean): Promise<Partial<{ [C in Chain]: Deployment<Chain> }>> {
@@ -1336,6 +1344,7 @@ async function pullChainConfig<N extends Network, C extends Chain>(
13361344

13371345
const paused = await ntt.isPaused();
13381346
const owner = await ntt.getOwner();
1347+
const pauser = await ntt.getPauser();
13391348

13401349
const version = getVersion(manager.chain, ntt);
13411350

@@ -1355,6 +1364,9 @@ async function pullChainConfig<N extends Network, C extends Chain>(
13551364
inbound: {},
13561365
},
13571366
};
1367+
if (pauser) {
1368+
config.pauser = pauser.toString();
1369+
}
13581370
return [config, ch, ntt, decimals];
13591371
}
13601372

sdk/definitions/src/ntt.ts

+4
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,12 @@ export interface Ntt<N extends Network, C extends Chain> {
146146

147147
getOwner(): Promise<AccountAddress<C>>;
148148

149+
getPauser(): Promise<AccountAddress<C> | null>;
150+
149151
setOwner(newOwner: AccountAddress<C>, payer?: AccountAddress<C>): AsyncGenerator<UnsignedTransaction<N, C>>;
150152

153+
setPauser(newOwner: AccountAddress<C>, payer?: AccountAddress<C>): AsyncGenerator<UnsignedTransaction<N, C>>;
154+
151155
getThreshold(): Promise<number>;
152156

153157
setPeer(

sdk/evm/src/ntt.ts

+4
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,10 @@ export class EvmNtt<N extends Network, C extends EvmChains>
201201
return new EvmAddress(await this.manager.owner()) as AccountAddress<C>;
202202
}
203203

204+
async getPauser(): Promise<AccountAddress<C> | null> {
205+
return new EvmAddress(await this.manager.pauser()) as AccountAddress<C>;
206+
}
207+
204208
async *setOwner(owner: AccountAddress<C>) {
205209
const canonicalOwner = canonicalAddress({chain: this.chain, address: owner});
206210
const tx = await this.manager.transferOwnership.populateTransaction(canonicalOwner);

solana/ts/sdk/ntt.ts

+8
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,10 @@ export class SolanaNtt<N extends Network, C extends SolanaChains>
189189
return new SolanaAddress(config.owner) as AccountAddress<C>;
190190
}
191191

192+
async getPauser(): Promise<AccountAddress<C> | null> {
193+
return null
194+
}
195+
192196
async *setOwner(newOwner: AccountAddress<C>, payer: AccountAddress<C>) {
193197
const sender = new SolanaAddress(payer).unwrap();
194198
const ix = await NTT.createTransferOwnershipInstruction(this.program, {
@@ -201,6 +205,10 @@ export class SolanaNtt<N extends Network, C extends SolanaChains>
201205
yield this.createUnsignedTx({ transaction: tx }, "Ntt.SetOwner");
202206
}
203207

208+
async *setPauser(_newPauser: AccountAddress<C>, _payer: AccountAddress<C>) {
209+
throw new Error("Pauser role not supported on Solna.");
210+
}
211+
204212
async isRelayingAvailable(destination: Chain): Promise<boolean> {
205213
if (!this.quoter) return false;
206214
return await this.quoter.isRelayEnabled(destination);

0 commit comments

Comments
 (0)