Skip to content

Commit

Permalink
common: v0.2.10, bytesToAddr
Browse files Browse the repository at this point in the history
  • Loading branch information
dcposch committed Sep 22, 2024
1 parent efd259b commit b8b4fe6
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 51 deletions.
43 changes: 16 additions & 27 deletions packages/daimo-api/src/contract/ClogMatcher.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
import { assertNotNull, debugJson, retryBackoff } from "@daimo/common";
import {
assertNotNull,
bytesToAddr,
debugJson,
retryBackoff,
} from "@daimo/common";
import { daimoFastCctpAddrs } from "@daimo/contract";
import { Kysely } from "kysely";
import {
Address,
bytesToHex,
getAddress,
Hex,
hexToBytes,
zeroAddress,
} from "viem";
import { Address, bytesToHex, Hex, hexToBytes, zeroAddress } from "viem";

import { ForeignTokenTransfer } from "./foreignCoinIndexer";
import { DB as IndexDB } from "../codegen/dbIndex";
Expand Down Expand Up @@ -72,12 +70,9 @@ export class ClogMatcher {
transactionHash: bytesToHex(row.tx_hash, { size: 32 }),
transactionIndex: Number(row.tx_idx),
logIndex: Number(row.sort_idx),
address:
row.token == null
? zeroAddress
: getAddress(bytesToHex(row.token, { size: 20 })),
from: getAddress(bytesToHex(row.f, { size: 20 })),
to: getAddress(bytesToHex(row.t, { size: 20 })),
address: row.token == null ? zeroAddress : bytesToAddr(row.token),
from: bytesToAddr(row.f),
to: bytesToAddr(row.t),
value: BigInt(row.amount),
};
const token = this.tokenReg.getToken(transferLog.address, chainId);
Expand Down Expand Up @@ -114,11 +109,9 @@ export class ClogMatcher {
transactionHash: bytesToHex(row.tx_hash, { size: 32 }),
transactionIndex: Number(row.tx_idx),
logIndex: Number(row.log_idx),
address: getAddress(bytesToHex(row.to_token, { size: 20 })),
from: getAddress(
bytesToHex(assertNotNull(row.from_addr), { size: 20 })
),
to: getAddress(bytesToHex(row.to_addr, { size: 20 })),
address: bytesToAddr(row.to_token),
from: bytesToAddr(assertNotNull(row.from_addr)),
to: bytesToAddr(row.to_addr),
value: BigInt(row.to_amount),
};

Expand Down Expand Up @@ -201,13 +194,9 @@ export class ClogMatcher {
transactionHash: bytesToHex(assertNotNull(row.tx_hash), { size: 32 }),
transactionIndex: Number(row.tx_idx),
logIndex: Number(row.log_idx),
address: getAddress(
bytesToHex(assertNotNull(row.from_token), { size: 20 })
),
from: getAddress(
bytesToHex(assertNotNull(row.from_addr), { size: 20 })
),
to: getAddress(bytesToHex(assertNotNull(row.to_addr), { size: 20 })),
address: bytesToAddr(assertNotNull(row.from_token)),
from: bytesToAddr(assertNotNull(row.from_addr)),
to: bytesToAddr(assertNotNull(row.to_addr)),
value: BigInt(assertNotNull(row.to_amount)),
};
const crossChainToken = this.tokenReg.getToken(
Expand Down
7 changes: 4 additions & 3 deletions packages/daimo-api/src/contract/foreignCoinIndexer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import {
amountToDollars,
assertNotNull,
BigIntStr,
bytesToAddr,
debugJson,
EAccount,
guessTimestampFromNum,
Expand Down Expand Up @@ -104,9 +105,9 @@ export class ForeignCoinIndexer extends Indexer {
address:
row.token == null
? zeroAddress // ETH / native token transfer
: getAddress(bytesToHex(row.token, { size: 20 })), // ERC-20
from: getAddress(bytesToHex(row.f, { size: 20 })),
to: getAddress(bytesToHex(row.t, { size: 20 })),
: bytesToAddr(row.token), // ERC-20
from: bytesToAddr(row.f),
to: bytesToAddr(row.t),
value: BigInt(row.amount),
}))
.filter((t) => t.address !== chainConfig.tokenAddress) // not home coin
Expand Down
7 changes: 4 additions & 3 deletions packages/daimo-api/src/contract/homeCoinIndexer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
PreSwapTransfer,
TransferClog,
assertNotNull,
bytesToAddr,
guessTimestampFromNum,
hexToBuffer,
retryBackoff,
Expand Down Expand Up @@ -98,9 +99,9 @@ export class HomeCoinIndexer extends Indexer {
transactionHash: bytesToHex(row.tx_hash, { size: 32 }),
transactionIndex: Number(row.tx_idx),
logIndex: Number(row.sort_idx) / 2,
address: getAddress(bytesToHex(assertNotNull(row.token), { size: 20 })),
from: getAddress(bytesToHex(row.f, { size: 20 })),
to: getAddress(bytesToHex(row.t, { size: 20 })),
address: bytesToAddr(assertNotNull(row.token)),
from: bytesToAddr(row.f),
to: bytesToAddr(row.t),
value: BigInt(row.amount),
};
txHashes.add(transferLog.transactionHash);
Expand Down
4 changes: 2 additions & 2 deletions packages/daimo-api/src/contract/nameRegistry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
EAccount,
assertEqual,
assertNotNull,
bytesToAddr,
isValidName,
now,
retryBackoff,
Expand All @@ -18,7 +19,6 @@ import {
import { Kysely } from "kysely";
import {
Address,
bytesToHex,
bytesToString,
encodeFunctionData,
getAddress,
Expand Down Expand Up @@ -133,7 +133,7 @@ export class NameRegistry extends Indexer {
return {
timestamp: Number(r.block_ts),
name: bytesToString(r.name, { size: 32 }),
addr: getAddress(bytesToHex(r.addr, { size: 20 })),
addr: bytesToAddr(r.addr),
};
});
this.logs.push(...names);
Expand Down
11 changes: 6 additions & 5 deletions packages/daimo-api/src/contract/noteIndexer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ import {
DaimoNoteStatus,
amountToDollars,
assertNotNull,
bytesToAddr,
debugJson,
getEAccountStr,
getNoteId,
retryBackoff,
} from "@daimo/common";
import { Kysely } from "kysely";
import { Address, Hex, bytesToHex, getAddress } from "viem";
import { Address, Hex, bytesToHex } from "viem";

import { Indexer } from "./indexer";
import { NameRegistry } from "./nameRegistry";
Expand Down Expand Up @@ -99,11 +100,11 @@ export class NoteIndexer extends Indexer {
transactionIndex: Number(r.tx_idx),
logIndex: Number(r.log_idx),
transactionHash: bytesToHex(r.tx_hash, { size: 32 }),
from: getAddress(bytesToHex(r.creator, { size: 20 })),
redeemer: r.redeemer && getAddress(bytesToHex(r.redeemer, { size: 20 })),
ephemeralOwner: getAddress(bytesToHex(r.ephemeral_owner, { size: 20 })),
from: bytesToAddr(r.creator),
redeemer: r.redeemer && bytesToAddr(r.redeemer),
ephemeralOwner: bytesToAddr(r.ephemeral_owner),
amount: BigInt(r.amount),
logAddr: getAddress(bytesToHex(r.log_addr, { size: 20 })),
logAddr: bytesToAddr(r.log_addr),
}));
}

Expand Down
15 changes: 6 additions & 9 deletions packages/daimo-api/src/contract/requestIndexer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
DaimoRequestV2Status,
amountToDollars,
assertNotNull,
bytesToAddr,
debugJson,
decodeRequestIdString,
encodeRequestId,
Expand All @@ -14,7 +15,7 @@ import {
retryBackoff,
} from "@daimo/common";
import { Kysely } from "kysely";
import { Address, Hex, bytesToHex, getAddress } from "viem";
import { Address, Hex, bytesToHex } from "viem";

import { Indexer } from "./indexer";
import { NameRegistry } from "./nameRegistry";
Expand Down Expand Up @@ -92,13 +93,11 @@ export class RequestIndexer extends Indexer {
transactionHash: bytesToHex(r.tx_hash, { size: 32 }),
logIndex: Number(r.log_idx),
id: BigInt(r.id),
recipient: getAddress(
bytesToHex(assertNotNull(r.recipient), { size: 20 })
),
creator: getAddress(bytesToHex(assertNotNull(r.creator), { size: 20 })),
recipient: bytesToAddr(assertNotNull(r.recipient)),
creator: bytesToAddr(assertNotNull(r.creator)),
amount: BigInt(assertNotNull(r.amount)),
metadata: bytesToHex(r.metadata || Buffer.from([])),
logAddr: getAddress(bytesToHex(r.log_addr, { size: 20 })),
logAddr: bytesToAddr(r.log_addr),
blockNumber: BigInt(r.block_num),
blockTime: Number(r.block_ts),
}));
Expand All @@ -108,9 +107,7 @@ export class RequestIndexer extends Indexer {
transactionHash: bytesToHex(r.tx_hash, { size: 32 }),
logIndex: Number(r.log_idx),
id: BigInt(r.id),
fulfiller: getAddress(
bytesToHex(assertNotNull(r.fulfiller), { size: 20 })
),
fulfiller: bytesToAddr(assertNotNull(r.fulfiller)),
blockNumber: BigInt(r.block_num),
blockTime: Number(r.block_ts),
}));
Expand Down
2 changes: 1 addition & 1 deletion packages/daimo-common/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@daimo/common",
"version": "0.2.9",
"version": "0.2.10",
"description": "Shared between web and mobile",
"main": "dist/index.js",
"types": "dist/index.d.ts",
Expand Down
19 changes: 18 additions & 1 deletion packages/daimo-common/src/viemClient.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
import { extractChain, Chain } from "viem";
import {
extractChain,
Chain,
getAddress,
bytesToHex,
ByteArray,
Address,
} from "viem";
import {
mainnet,
sepolia,
Expand Down Expand Up @@ -62,3 +69,13 @@ const alchemyChainNames: Record<number, string> = {
[optimismSepolia.id]: "opt-sepolia",
};
const supportedChainIds = Object.keys(alchemyChainNames).map(Number);

/** Converts a buffer to a viem Address. Zero-length buffer = zero addr.
* Any length other than 0 or 20 bytes = throws an error.
*/
export function bytesToAddr(bytes: ByteArray): Address {
if (bytes.length !== 0 && bytes.length !== 20) {
throw new Error(`invalid address byte[], got ${bytes.length} bytes`);
}
return getAddress(bytesToHex(bytes, { size: 20 }));
}

0 comments on commit b8b4fe6

Please sign in to comment.