Skip to content

add optional timestampms #661

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

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions packages/solana/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,15 @@ export class TurnkeySigner {
tx: Transaction | VersionedTransaction,
fromAddress: string,
organizationId?: string,
timestampMs?: number,
) {
const fromKey = new PublicKey(fromAddress);
const messageToSign: Buffer = this.getMessageToSign(tx);
const signRawPayloadResult = await this.signRawPayload(
messageToSign.toString("hex"),
fromAddress,
organizationId ?? this.organizationId,
timestampMs,
);
const signature = `${signRawPayloadResult?.r}${signRawPayloadResult?.s}`;

Expand All @@ -84,11 +86,13 @@ export class TurnkeySigner {
message: Uint8Array,
fromAddress: string,
organizationId?: string,
timestampMs?: number,
): Promise<Uint8Array> {
const signRawPayloadResult = await this.signRawPayload(
Buffer.from(message).toString("hex"),
fromAddress,
organizationId,
timestampMs,
);
return Buffer.from(
`${signRawPayloadResult?.r}${signRawPayloadResult?.s}`,
Expand All @@ -107,6 +111,7 @@ export class TurnkeySigner {
tx: Transaction | VersionedTransaction,
fromAddress: string,
organizationId?: string,
timestampMs?: number,
): Promise<Transaction | VersionedTransaction> {
const payloadToSign = Buffer.from(
tx.serialize({
Expand All @@ -119,6 +124,7 @@ export class TurnkeySigner {
payloadToSign,
fromAddress,
organizationId,
timestampMs,
);

const decodedTransaction = Buffer.from(signedTransaction, "hex");
Expand All @@ -135,12 +141,13 @@ export class TurnkeySigner {
unsignedTransaction: string,
signWith: string,
organizationId?: string,
timestampMs?: number
) {
if (this.client instanceof TurnkeyClient) {
const response = await this.client.signTransaction({
type: "ACTIVITY_TYPE_SIGN_TRANSACTION_V2",
organizationId: organizationId ?? this.organizationId,
timestampMs: String(Date.now()),
timestampMs: timestampMs ? String(timestampMs) : String(Date.now()),
parameters: {
signWith,
unsignedTransaction,
Expand Down Expand Up @@ -175,12 +182,13 @@ export class TurnkeySigner {
payload: string,
signWith: string,
organizationId?: string,
timestampMs?: number,
) {
if (this.client instanceof TurnkeyClient) {
const response = await this.client.signRawPayload({
type: "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2",
organizationId: organizationId ?? this.organizationId,
timestampMs: String(Date.now()),
timestampMs: timestampMs ? String(timestampMs) : String(Date.now()),
parameters: {
signWith,
payload,
Expand Down Expand Up @@ -221,12 +229,13 @@ export class TurnkeySigner {
payloads: string[],
signWith: string,
organizationId?: string,
timestampMs?: number,
) {
if (this.client instanceof TurnkeyClient) {
const response = await this.client.signRawPayloads({
type: "ACTIVITY_TYPE_SIGN_RAW_PAYLOADS",
organizationId: organizationId ?? this.organizationId,
timestampMs: String(Date.now()),
timestampMs: timestampMs ? String(timestampMs) : String(Date.now()),
parameters: {
signWith,
payloads,
Expand Down
25 changes: 19 additions & 6 deletions packages/viem/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,8 @@ export function createAccountWithAddress(input: {
transaction: TTransactionSerializable,
options?: {
serializer?:
| SerializeTransactionFn<TTransactionSerializable>
| undefined;
| SerializeTransactionFn<TTransactionSerializable>
| undefined;
},
): Promise<Hex> {
const serializer: SerializeTransactionFn<TTransactionSerializable> =
Expand Down Expand Up @@ -300,8 +300,8 @@ export async function createApiKeyAccount(
transaction: TTransactionSerializable,
options?: {
serializer?:
| SerializeTransactionFn<TTransactionSerializable>
| undefined;
| SerializeTransactionFn<TTransactionSerializable>
| undefined;
},
): Promise<Hex> {
const serializer: SerializeTransactionFn<TTransactionSerializable> =
Expand Down Expand Up @@ -338,6 +338,7 @@ export async function signAuthorization(
parameters: TSignAuthorizationParameters,
organizationId: string,
signWith: string,
timestampMs?: number,
): Promise<SignAuthorizationReturnType> {
const { chainId, nonce, to = "object" } = parameters;
const address = parameters.contractAddress ?? parameters.address;
Expand All @@ -360,6 +361,7 @@ export async function signAuthorization(
organizationId,
signWith,
to,
timestampMs,
);

if (to === "object")
Expand All @@ -379,13 +381,16 @@ export async function signMessage(
message: SignableMessage,
organizationId: string,
signWith: string,
timestampMs?: number,
): Promise<Hex> {
const hashedMessage = hashMessage(message);
const signedMessage = await signMessageWithErrorWrapping(
client,
hashedMessage,
organizationId,
signWith,
undefined,
timestampMs,
);
return `${signedMessage}` as Hex;
}
Expand Down Expand Up @@ -435,6 +440,7 @@ export async function signTypedData(
data: TypedData | { [key: string]: unknown },
organizationId: string,
signWith: string,
timestampMs?: number,
): Promise<Hex> {
const hashToSign = hashTypedData(data as HashTypedDataParameters);

Expand All @@ -444,6 +450,7 @@ export async function signTypedData(
organizationId,
signWith,
"hex",
timestampMs,
)) as Hex;
}

Expand All @@ -452,6 +459,7 @@ async function signTransactionWithErrorWrapping(
unsignedTransaction: string,
organizationId: string,
signWith: string,
timestampMs?: number
): Promise<Hex> {
let signedTx: string;
try {
Expand All @@ -460,6 +468,7 @@ async function signTransactionWithErrorWrapping(
unsignedTransaction,
organizationId,
signWith,
timestampMs,
);
} catch (error: any) {
// Wrap Turnkey error in Viem-specific error
Expand Down Expand Up @@ -492,6 +501,7 @@ async function signTransactionImpl(
unsignedTransaction: string,
organizationId: string,
signWith: string,
timestampMs?: number
): Promise<string> {
if (client instanceof TurnkeyClient) {
const { activity } = await client.signTransaction({
Expand All @@ -502,7 +512,7 @@ async function signTransactionImpl(
type: "TRANSACTION_TYPE_ETHEREUM",
unsignedTransaction: unsignedTransaction,
},
timestampMs: String(Date.now()), // millisecond timestamp
timestampMs: timestampMs ? String(timestampMs) : String(Date.now()), // millisecond timestamp
});

assertActivityCompleted(activity);
Expand Down Expand Up @@ -530,6 +540,7 @@ async function signMessageWithErrorWrapping(
organizationId: string,
signWith: string,
to?: TSignatureFormat,
timestampMs?: number,
): Promise<TSignMessageResult> {
let signedMessage: TSignMessageResult;

Expand All @@ -540,6 +551,7 @@ async function signMessageWithErrorWrapping(
organizationId,
signWith,
to,
timestampMs,
);
} catch (error: any) {
// Wrap Turnkey error in Viem-specific error
Expand Down Expand Up @@ -573,6 +585,7 @@ async function signMessageImpl(
organizationId: string,
signWith: string,
to?: TSignatureFormat,
timestampMs?: number,
): Promise<TSignMessageResult> {
let result: TSignature;

Expand All @@ -586,7 +599,7 @@ async function signMessageImpl(
encoding: "PAYLOAD_ENCODING_HEXADECIMAL",
hashFunction: "HASH_FUNCTION_NO_OP",
},
timestampMs: String(Date.now()), // millisecond timestamp
timestampMs: timestampMs ? String(timestampMs) : String(Date.now()), // millisecond timestamp
});

assertActivityCompleted(activity);
Expand Down