Deploying contracts
Deploying a contract with some EVM bytecode is straightforward with EIP-1193 JavaScript provider objects, although it does require making a few RPC requests:
export async function deployContract(
createBytecode: Data,
provider: EthereumProvider
): Promise<{
transactionHash: Data;
contractAddress: Data;
}> {
// just use the first unlocked account
const [account] = await provider.request({
method: "eth_accounts",
params: []
});
// issue a transaction that will be mined immediately
const transactionHash = Data.fromHex(await provider.request({
method: "eth_sendTransaction",
params: [{
from: account,
gas: "0x989680",
data: createBytecode.toHex()
}]
}));
// read the receipt and extract the deployed contract address
const contractAddress = Data.fromHex((await provider.request({
method: "eth_getTransactionReceipt",
params: [transactionHash.toHex()]
})).contractAddress);
return {
transactionHash,
contractAddress
};
}