@atomiqlabs/chain-starknet
Version:
Starknet specific base implementation
40 lines (32 loc) • 1.44 kB
text/typescript
import {Account, CallData, DeployAccountContractPayload, ec, hash, Provider} from "starknet";
import {toHex} from "../../utils/Utils";
import {Buffer} from "buffer";
const OZaccountClassHash = '0x00261c293c8084cd79086214176b33e5911677cec55104fddc8d25b0b736dcad';
//Openzeppelin Account wallet
export class StarknetKeypairWallet extends Account {
public readonly publicKey: string;
constructor(provider: Provider, privateKey: string) {
const publicKey = ec.starkCurve.getStarkKey(toHex(privateKey));
// Calculate future address of the account
const OZaccountConstructorCallData = CallData.compile({ publicKey });
const OZcontractAddress = hash.calculateContractAddressFromHash(
publicKey,
OZaccountClassHash,
OZaccountConstructorCallData,
0
);
super(provider, OZcontractAddress, privateKey, "1");
this.publicKey = publicKey;
}
public getDeploymentData(): DeployAccountContractPayload {
return {
classHash: OZaccountClassHash,
constructorCalldata: CallData.compile({ publicKey: this.publicKey }),
addressSalt: this.publicKey,
contractAddress: this.address
}
}
public static generateRandomPrivateKey(): string {
return "0x"+Buffer.from(ec.starkCurve.utils.randomPrivateKey()).toString("hex");
}
}