I am a lifelong learner. I am constantly seeking out new knowledge and experiences, and am always looking for ways to


Share Dialog
Share Dialog
I am a lifelong learner. I am constantly seeking out new knowledge and experiences, and am always looking for ways to

Subscribe to offtotheether

Subscribe to offtotheether
<100 subscribers
<100 subscribers
Ang guest post na ito mula sa Kiwi News discusses kung paano mag tap sa Ethereum liquidity sa pamamagitan ng paggawa ng NFT minting magagamit parehong sa L1 at L2.
Ethereum Mainnet pa rin ang may pinaka-ETH likido - bilang ng pagsulat, tungkol sa 100X higit pa kaysa OP. Kasabay nito, nais naming lahat ng mga gumagamit na makisali sa L2 smart contract upang hindi sila magbayad ng isang $ 50 gas fee para sa bawat simpleng pagkilos.
So, paano kami mag tap sa Mainnet liquidity habang gumagamit ng L2 contracts para mint ang NFT
Naranasan namin ang problemang ito sa aming proyekto - Kiwi News. Ito ay isang Hacker News tulad ng link aggregator na nakatuon sa crypto tech, mga produkto & kultura nilalaman.
Ang Kiwi ay parehong isang app at isang protocol na binuo sa isang algorithm na katulad ng Farcaster (tinatawag itong "set reconciliation"). Nangangahulugan ito na ang lahat ay maaaring mag fork ng Kiwi network at magpatakbo ng kanilang sariling app, pag access sa aming nilalaman na may iba't ibang mga algorithm, pag moderate, at iba pa.
Ngunit upang aktwal na gamitin ang app para sa pag upvoting, pagsusumite ng mga link, at pagkomento, ang aming mga gumagamit ay dapat munang bumili ng aming NFT. Tulad ng kailangan mong magbayad ng gas upang magpadala ng isang transaksyon ng Ethereum o kailangan mong magbayad kapag lumilikha ng isang Farcaster account sa Kiwi News, kailangan mong mint isang OP NFT upang makisali.
Pero actually hindi namin sinimulan ang NFT sale namin sa OP Mainnet. Ang aming NFT ay unang magagamit lamang sa Ethereum, ngunit bilang ito naka out, sa panahon ng $PEPE mania, nagkakahalaga ito ng $ 19 upang mint ang aming $15 NFT. Kaya nagdesisyon kaming lumipat sa OP Mainnet.
At tila isang panalong panalo: Ang aming mga gumagamit ay nagbayad ng mas kaunti, at kumita kami ng parehong halaga at maaaring teknikal na kahit na dagdagan ang mga presyo.
Ngunit mabilis naming nalaman na ang karamihan sa mga tao - kahit na matagal nang Ethereum mga gumagamit - ay hindi nagkaroon ng pera bridged sa OP Mainnet. Siyempre, maaari silang pumunta sa isang tulay, ngunit ang pagkuha ng mga ito off ang aming website ay nangangahulugan ng isang pangkalahatang mas mababang benta conversion. At tulad ng sinasabi ng lumang mantra ng pamamahagi, dapat kang "mangisda kung saan ang isda."
Kaya, nagpasya kaming malutas ang problemang ito sa pamamagitan ng paggawa ng aming NFT minting na magagamit kapwa sa L1 at L2.
Narito ang isyu: Ang aming kontrata sa NFT ay nasa L2, at naroon lamang ang function ni Zora, na maaaring tawagan upang mint ang NFT. Pa, ang isang bagong gumagamit ng Kiwi News ay maaaring magkaroon lamang ng mga pondo sa Ethereum Mainnet.mintWithRewards(...)
Kung may pondo sila sa OP Mainnet, maganda; pwede lang nila direktang bilhin at mint ang NFT.
Gayunpaman, kung mayroon silang mga pondo sa Ethereum Mainnet, kailangan nating makuha ang mga ito upang tulay ang mga pondo na ito sa OP Mainnet muna at, ideally, bumili ng NFT sa panahon ng proseso ng bridging.
Ngayon, sa ilalim ng walang mga pangyayari ay nais namin ang gumagamit na mag sign ng maraming mga transaksyon, tulad ng ito ay humantong sa mas mataas na mga rate ng churn at ito ay gumawa ng pangkalahatang proseso mas mabigat. Ang pagkakaroon upang kumpirmahin ang maramihang mga transaksyon sa isang hilera ay nangangahulugan ng isang mas mataas na pagkakataon ng mga bagay na pagpunta mali, na kung saan ay kung bakit kami nagsimulang naghahanap sa mga paraan upang pagsamahin ang bridging at pagbili ng NFT atomically.
Kaya, sumisid tayo sa aktwal na code ngayon.
Una sa lahat, kailangan mong maunawaan na ang sistema ng Optimismo ay may mga API kapwa sa L1 at L2. Maaari mong, halimbawa, tumawag ng isang kontrata sa L2 upang bawiin ang iyong mga pondo sa L1. O maaari kang tumawag ng isang function sa L1 upang direktang magdeposito sa L2.
Ang mga interface na ito ay partikular na kapaki pakinabang sa aming kaso bilang ang OptimismPortal (Etherscan, Source code) sa Ethereum Mainnet ay may function na tinatawag na OptimismPortal.depositTransaction(...):
/// @notice Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in
/// deriving deposit transactions. Note that if a deposit is made by a contract, its
/// address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider
/// using the CrossDomainMessenger contracts for a simpler developer experience.
/// @param _to Target address on L2.
/// @param _value ETH value to send to the recipient.
/// @param _gasLimit Amount of L2 gas to purchase by burning gas on L1.
/// @param _isCreation Whether or not the transaction is a contract creation.
/// @param _data Data to trigger the recipient with.
function depositTransaction(
address to,
uint256 value,
uint64 gasLimit,
bool isCreation,
bytes memory data
)
public
payable;
Pansinin kung paano 'ang mga argumento ay tila katulad ng pagbibigay ng pangalan ng isang regular na transaksyon ng Ethereum Naroon ang , ang , at isang pag-encode ng mga detalye ng tawag sa function. ay, walang sorpresa dito alinman, pagtukoy sa maximum gas na transaksyon ay maaaring gamitin at kung ay dapat lumikha ng isang bagong kontrata.depositTransaction(...)address touint256 valuebytes memory datauint64 gasLimitbool isCreationbytes memory data
depositTransaction(...) 's argumento ay magkatulad dahil sa loob, sa panahon ng proseso ng bridging, ang OP mainnet node ay magpapadala ng isang transaksyon sa OP Mainnet sa kani kanilang mga parameter kapag ang proseso ng bridging ng L1 caller ay nagtagumpay.
Ito ay partikular na kapaki pakinabang para sa amin kapag nais na parehong mint ang NFT gamit ang function ng Zora sa OP mainnet, ngunit din na nagpapahintulot sa mga gumagamit na tumawag sa function na ito mula sa Ethereum mainnet nang walang hiwalay na mga transaksyon sa pag bridge at minting.mintWithRewards(...)
Kaya, talagang sumisid tayo nang malalim sa code dito. Nasa ibaba ang interface para sa aming kontrata sa koleksyon ng NFT sa OP mainnet na naka deploy sa pamamagitan ng Zora:
function mintWithRewards(
address recipient,
uint256 quantity,
string calldata comment,
address mintReferral
) external payable returns (uint256);
Ang function ay nangangailangan ng isang , ang receiver ng NFT, a upang tukuyin kung gaano karaming mga NTF ang dapat minted, a para onchain komento at isang upang kredito ang isang referrer para sa recommending ang mint.address recipientuint256 quantitystring calldata commentaddress mintReferral
Kaya, ipagpalagay na kumuha kami sa trabaho ng isang front end engineer na inatasan sa pagbuo ng isang NFT mint button na gumagana kapwa sa OP mainnet at ETH mainnet, narito ang isang hakbang hakbang na proseso sa kung ano ang gusto naming magkaroon upang ma compute:
Suriin ang balanse ng ETH ng gumagamit sa OP Mainnet. Kung ang gumagamit ay kayang bayaran upang mint ang NFT, prompt ang gumagamit na tumawag nang direkta sa Optimismo.mintWithRewards(...)
Kung ang gumagamit ay walang sapat na ETH sa OP Mainnet, suriin ang Ethereum Mainnet balance ng gumagamit. Kung hindi kayang bilhin ng user ang NFT sa ETH mainnet, ipaalam ito sa user; Kung hindi, magpatuloy sa Hakbang 3.
import { fetchBalance, getAccount } from "@wagmi/core";
import { mainnet, optimism } from "wagmi/chains";
Import { utils } from “ethers”;
const { address } = getAccount();
if (!address) {
throw new Error("Account not available");
}
const balance = {
mainnet: (await fetchBalance({ address, chainId: mainnet.id })).value,
optimism: (await fetchBalance({ address, chainId: optimism.id })).value,
};
const mintPriceETH = utils.parseEther(“0.00256”);
if (balance.optimism >= mintPriceETH) {
// mint on OP mainnet
} else if (balance.mainnet >= mintPriceETH) {
// mint on ETH mainnet
} else {
throw new Error(“Insufficient balance”);
}
Ngayon na alam namin na ang gumagamit ay pagpunta sa mint ang NFT mula sa ETH mainnet sa pamamagitan ng OptimismPortal, magkakaroon kami upang maghanda ng dalawang ETH tawag. Ang isa ay para sa pagtawag sa L1, at ang isa ay para sa pagtawag sa L2. Ipapasa namin ang pangalawang tawag na sinadya upang maisagawa sa OP mainnet sa 's . Narito kung paano namin gawin iyon:depositTransaction(...)mintWithRewards(...)depositTransaction(...)bytes memory data
3.1. binubuo namin ang function call data para sa pamamagitan ng pagkolekta ng mga input para sa function sa L2. Ginagamit namin ang interface ng ethers.encodeFunctionData(pangalan, [... inputs]) para i package ang tawag bilang hex string.mintWithRewards(...)mintWithRewards(...)
import { getAccount } from "@wagmi/core";
import { Contract } from "@ethersproject/contracts";
import { mainnet, optimism } from "wagmi/chains";
import { getProvider } from “./viem-adapter.mjs”;
const nftAddress = 0xabc…;
const nftABI = [{...}];
function prepareL2Call() {
const { address } = getAccount();
const opProvider = getProvider({ chainId: optimism.id });
const contract = new Contract(nftAddress, nftABI, opProvider);
const recipient = address;
const quantity = 1;
const comment = “minting this from mainnet!”
const referrer = null;
return contract.interface.encodeFunctionData("mintWithRewards", [
recipient,
quantity,
comment,
referrer,
]);
}
3.2. Para sa , pagkatapos ay piliin namin ang target ng function call bilang at itinakda namin sa halaga ng ETH na nais naming ipasa sa . Tulad ng para sa , kami ay dapat na gayahin ang gastos ng ETH tawag sa Optimismo sa balanse ng gumagamit. Gayunpaman, ang balanse ng ETH ng gumagamit ay hindi sapat, tandaan mo Kaya ang anumang tawag sa OP mainnet provider at address ng gumagamit ay error.depositTransaction(...)address touint256 valueaddress touint64 gasLimitestimateGas
Dahil dito, iminumungkahi namin na matuklasan ang isang static na guestimate sa pamamagitan ng, hal., pagtawag sa function nang manu mano at gamitin ang halaga na ito sa code.mintWithRewards(...)
Tulad ng para sa iba pang mga argumento, ay at sa wakas ay naglalaman ng data ng tawag na nabuo sa hakbang 3.1.bool isCreationfalsebytes memory data
import { prepareWriteContract } from "@wagmi/core";
import { mainnet } from "wagmi/chains";
const optimismPortalAddress = 0x…;
const optimismPortalABI = [{...}, …];
async function writeToDeposit(nftAddress, price, data) {
const isCreation = false;
const gasLimit = 170000;
return await prepareWriteContract({
address: optimismPortalAddress,
abi: optimismPortalABI,
functionName: "depositTransaction",
args: [nftAddress, price, gasLimit, isCreation, data],
value: price,
chainId: mainnet.id,
});
}
3.3. Importante, kailangan nating magdeposito ng kahit amount of or more as to the L1 call. Tinitiyak nito na ang ilang Ether ay idineposito sa Optimismo at ginawang magagamit para sa tawag. Ginagawa natin ito sa pamamagitan ng pagtatakda sa halaga ng .uint256 valuemsg.valuemintWithRewards(...)msg.valueprice
3.4. Sa wakas, pagkakaroon ng lahat ng mga argumento na natipon, hinihimok namin ang gumagamit na lagdaan ang transaksyong ito para sa Ethereum mainnet.
import { useContractWrite } from "wagmi";
// …
function prepareL2Call(...) {...}
async function writeToDeposit(...) {...}
// …
const BuyButton = (props) => {
// …
const { write } = useContractWrite(config);
// …
return (
<button disabled={!write} onClick={() => write?.()}>
Buy NFT
</button>
);
}
At iyon na! Iyon ang kailangan mong gawin kung nais mong atomically mint ang isang NFT sa Optimismo habang paglalaan ng tawag nang direkta mula sa Ethereum mainnet.
Habang ang mga snippet ng code ay hindi eksakto ang code ng produksyon na ginagamit namin sa Kiwi News, napakalapit nila sa code na binuksan namin. Maaari mong mahanap ang buong pagkakasunud sunod ng paghahanda at higit pa sa aming GitHub. At maaari mong aktwal na subukan ito nang direkta sa pamamagitan ng pagpunta sa aming NFT minting page.
Ngayon, tiyak, ang paggamit ng function ng OptimismPortal ay hindi lamang ang pagpipilian para sa pagpunta mula sa L1 hanggang L2. Sa puntong ito, maraming mga palitan na nag aalok ng mga katulad na serbisyo, masyadong. Gayunpaman, ang isang espesyalidad ng OP Portal ay na pinapanatili nito ang ng address na iyon na nilagdaan at ipinadala ang transaksyon sa ETH mainnet. Ito ay maaaring maging partikular na mahalaga kapag ang iyong dapp ay umaasa sa address na iyon na kailangang maging lehitimong.depositTransaction(...)msg.sender
Kapag nag migrate ang aming NFT mula sa Ethereum sa OP Mainnet, kailangan namin ng isang paraan upang mag tap sa L1 likido habang pinapayagan pa rin ang lahat ng aming mga gumagamit na mint ito mula sa OP Mainnet pati na rin.
Ang OptimismPortal ay nagbibigay ng isang maginhawang pag andar sa parehong mga pondo ng tulay at isagawa ang isang ETH tawag sa isang solong atomic transaksyon, na nagpapagana ng isang mataas na pagkakataon ng tagumpay kapag ang isang gumagamit ay nagpapadala ng tawag.
Idinetalye namin ang aming React.js code, na sumusuri sa parehong Ethereum at L2 balanse upang magbigay ng tamang tawag para sa bawat gumagamit. Kung ang isang gumagamit ay walang OP ETH, makakakuha sila ng direktang onboarded sa pamamagitan ng bridging sa pamamagitan ng Portal.
Sa hinaharap, inaabangan namin ang mas kapana panabik na mga teknikal na pagkakataon. Halimbawa, gustung gusto naming magagawang atomically tap sa likido ng Base chain na may isang katulad na transaksyon ng Portal bilang upang gawing mas madaling tawagan ang aming code para sa lahat ng mga gumagamit ng Ethereum.
Umaasa kami na natagpuan mo ang post na ito na kapaki pakinabang sa iyong trabaho. Sa Kiwi News, lagi kaming nagsisikap na paglingkuran ang ecosystem nang may maraming utility hangga't kaya namin—maging sa pinakabagong balita, blog post, o GitHub repositories. Gusto naming sumakay ka bilang mambabasa! Check mo kami sa https://kiwinews.xyz.
Ang guest post na ito mula sa Kiwi News discusses kung paano mag tap sa Ethereum liquidity sa pamamagitan ng paggawa ng NFT minting magagamit parehong sa L1 at L2.
Ethereum Mainnet pa rin ang may pinaka-ETH likido - bilang ng pagsulat, tungkol sa 100X higit pa kaysa OP. Kasabay nito, nais naming lahat ng mga gumagamit na makisali sa L2 smart contract upang hindi sila magbayad ng isang $ 50 gas fee para sa bawat simpleng pagkilos.
So, paano kami mag tap sa Mainnet liquidity habang gumagamit ng L2 contracts para mint ang NFT
Naranasan namin ang problemang ito sa aming proyekto - Kiwi News. Ito ay isang Hacker News tulad ng link aggregator na nakatuon sa crypto tech, mga produkto & kultura nilalaman.
Ang Kiwi ay parehong isang app at isang protocol na binuo sa isang algorithm na katulad ng Farcaster (tinatawag itong "set reconciliation"). Nangangahulugan ito na ang lahat ay maaaring mag fork ng Kiwi network at magpatakbo ng kanilang sariling app, pag access sa aming nilalaman na may iba't ibang mga algorithm, pag moderate, at iba pa.
Ngunit upang aktwal na gamitin ang app para sa pag upvoting, pagsusumite ng mga link, at pagkomento, ang aming mga gumagamit ay dapat munang bumili ng aming NFT. Tulad ng kailangan mong magbayad ng gas upang magpadala ng isang transaksyon ng Ethereum o kailangan mong magbayad kapag lumilikha ng isang Farcaster account sa Kiwi News, kailangan mong mint isang OP NFT upang makisali.
Pero actually hindi namin sinimulan ang NFT sale namin sa OP Mainnet. Ang aming NFT ay unang magagamit lamang sa Ethereum, ngunit bilang ito naka out, sa panahon ng $PEPE mania, nagkakahalaga ito ng $ 19 upang mint ang aming $15 NFT. Kaya nagdesisyon kaming lumipat sa OP Mainnet.
At tila isang panalong panalo: Ang aming mga gumagamit ay nagbayad ng mas kaunti, at kumita kami ng parehong halaga at maaaring teknikal na kahit na dagdagan ang mga presyo.
Ngunit mabilis naming nalaman na ang karamihan sa mga tao - kahit na matagal nang Ethereum mga gumagamit - ay hindi nagkaroon ng pera bridged sa OP Mainnet. Siyempre, maaari silang pumunta sa isang tulay, ngunit ang pagkuha ng mga ito off ang aming website ay nangangahulugan ng isang pangkalahatang mas mababang benta conversion. At tulad ng sinasabi ng lumang mantra ng pamamahagi, dapat kang "mangisda kung saan ang isda."
Kaya, nagpasya kaming malutas ang problemang ito sa pamamagitan ng paggawa ng aming NFT minting na magagamit kapwa sa L1 at L2.
Narito ang isyu: Ang aming kontrata sa NFT ay nasa L2, at naroon lamang ang function ni Zora, na maaaring tawagan upang mint ang NFT. Pa, ang isang bagong gumagamit ng Kiwi News ay maaaring magkaroon lamang ng mga pondo sa Ethereum Mainnet.mintWithRewards(...)
Kung may pondo sila sa OP Mainnet, maganda; pwede lang nila direktang bilhin at mint ang NFT.
Gayunpaman, kung mayroon silang mga pondo sa Ethereum Mainnet, kailangan nating makuha ang mga ito upang tulay ang mga pondo na ito sa OP Mainnet muna at, ideally, bumili ng NFT sa panahon ng proseso ng bridging.
Ngayon, sa ilalim ng walang mga pangyayari ay nais namin ang gumagamit na mag sign ng maraming mga transaksyon, tulad ng ito ay humantong sa mas mataas na mga rate ng churn at ito ay gumawa ng pangkalahatang proseso mas mabigat. Ang pagkakaroon upang kumpirmahin ang maramihang mga transaksyon sa isang hilera ay nangangahulugan ng isang mas mataas na pagkakataon ng mga bagay na pagpunta mali, na kung saan ay kung bakit kami nagsimulang naghahanap sa mga paraan upang pagsamahin ang bridging at pagbili ng NFT atomically.
Kaya, sumisid tayo sa aktwal na code ngayon.
Una sa lahat, kailangan mong maunawaan na ang sistema ng Optimismo ay may mga API kapwa sa L1 at L2. Maaari mong, halimbawa, tumawag ng isang kontrata sa L2 upang bawiin ang iyong mga pondo sa L1. O maaari kang tumawag ng isang function sa L1 upang direktang magdeposito sa L2.
Ang mga interface na ito ay partikular na kapaki pakinabang sa aming kaso bilang ang OptimismPortal (Etherscan, Source code) sa Ethereum Mainnet ay may function na tinatawag na OptimismPortal.depositTransaction(...):
/// @notice Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in
/// deriving deposit transactions. Note that if a deposit is made by a contract, its
/// address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider
/// using the CrossDomainMessenger contracts for a simpler developer experience.
/// @param _to Target address on L2.
/// @param _value ETH value to send to the recipient.
/// @param _gasLimit Amount of L2 gas to purchase by burning gas on L1.
/// @param _isCreation Whether or not the transaction is a contract creation.
/// @param _data Data to trigger the recipient with.
function depositTransaction(
address to,
uint256 value,
uint64 gasLimit,
bool isCreation,
bytes memory data
)
public
payable;
Pansinin kung paano 'ang mga argumento ay tila katulad ng pagbibigay ng pangalan ng isang regular na transaksyon ng Ethereum Naroon ang , ang , at isang pag-encode ng mga detalye ng tawag sa function. ay, walang sorpresa dito alinman, pagtukoy sa maximum gas na transaksyon ay maaaring gamitin at kung ay dapat lumikha ng isang bagong kontrata.depositTransaction(...)address touint256 valuebytes memory datauint64 gasLimitbool isCreationbytes memory data
depositTransaction(...) 's argumento ay magkatulad dahil sa loob, sa panahon ng proseso ng bridging, ang OP mainnet node ay magpapadala ng isang transaksyon sa OP Mainnet sa kani kanilang mga parameter kapag ang proseso ng bridging ng L1 caller ay nagtagumpay.
Ito ay partikular na kapaki pakinabang para sa amin kapag nais na parehong mint ang NFT gamit ang function ng Zora sa OP mainnet, ngunit din na nagpapahintulot sa mga gumagamit na tumawag sa function na ito mula sa Ethereum mainnet nang walang hiwalay na mga transaksyon sa pag bridge at minting.mintWithRewards(...)
Kaya, talagang sumisid tayo nang malalim sa code dito. Nasa ibaba ang interface para sa aming kontrata sa koleksyon ng NFT sa OP mainnet na naka deploy sa pamamagitan ng Zora:
function mintWithRewards(
address recipient,
uint256 quantity,
string calldata comment,
address mintReferral
) external payable returns (uint256);
Ang function ay nangangailangan ng isang , ang receiver ng NFT, a upang tukuyin kung gaano karaming mga NTF ang dapat minted, a para onchain komento at isang upang kredito ang isang referrer para sa recommending ang mint.address recipientuint256 quantitystring calldata commentaddress mintReferral
Kaya, ipagpalagay na kumuha kami sa trabaho ng isang front end engineer na inatasan sa pagbuo ng isang NFT mint button na gumagana kapwa sa OP mainnet at ETH mainnet, narito ang isang hakbang hakbang na proseso sa kung ano ang gusto naming magkaroon upang ma compute:
Suriin ang balanse ng ETH ng gumagamit sa OP Mainnet. Kung ang gumagamit ay kayang bayaran upang mint ang NFT, prompt ang gumagamit na tumawag nang direkta sa Optimismo.mintWithRewards(...)
Kung ang gumagamit ay walang sapat na ETH sa OP Mainnet, suriin ang Ethereum Mainnet balance ng gumagamit. Kung hindi kayang bilhin ng user ang NFT sa ETH mainnet, ipaalam ito sa user; Kung hindi, magpatuloy sa Hakbang 3.
import { fetchBalance, getAccount } from "@wagmi/core";
import { mainnet, optimism } from "wagmi/chains";
Import { utils } from “ethers”;
const { address } = getAccount();
if (!address) {
throw new Error("Account not available");
}
const balance = {
mainnet: (await fetchBalance({ address, chainId: mainnet.id })).value,
optimism: (await fetchBalance({ address, chainId: optimism.id })).value,
};
const mintPriceETH = utils.parseEther(“0.00256”);
if (balance.optimism >= mintPriceETH) {
// mint on OP mainnet
} else if (balance.mainnet >= mintPriceETH) {
// mint on ETH mainnet
} else {
throw new Error(“Insufficient balance”);
}
Ngayon na alam namin na ang gumagamit ay pagpunta sa mint ang NFT mula sa ETH mainnet sa pamamagitan ng OptimismPortal, magkakaroon kami upang maghanda ng dalawang ETH tawag. Ang isa ay para sa pagtawag sa L1, at ang isa ay para sa pagtawag sa L2. Ipapasa namin ang pangalawang tawag na sinadya upang maisagawa sa OP mainnet sa 's . Narito kung paano namin gawin iyon:depositTransaction(...)mintWithRewards(...)depositTransaction(...)bytes memory data
3.1. binubuo namin ang function call data para sa pamamagitan ng pagkolekta ng mga input para sa function sa L2. Ginagamit namin ang interface ng ethers.encodeFunctionData(pangalan, [... inputs]) para i package ang tawag bilang hex string.mintWithRewards(...)mintWithRewards(...)
import { getAccount } from "@wagmi/core";
import { Contract } from "@ethersproject/contracts";
import { mainnet, optimism } from "wagmi/chains";
import { getProvider } from “./viem-adapter.mjs”;
const nftAddress = 0xabc…;
const nftABI = [{...}];
function prepareL2Call() {
const { address } = getAccount();
const opProvider = getProvider({ chainId: optimism.id });
const contract = new Contract(nftAddress, nftABI, opProvider);
const recipient = address;
const quantity = 1;
const comment = “minting this from mainnet!”
const referrer = null;
return contract.interface.encodeFunctionData("mintWithRewards", [
recipient,
quantity,
comment,
referrer,
]);
}
3.2. Para sa , pagkatapos ay piliin namin ang target ng function call bilang at itinakda namin sa halaga ng ETH na nais naming ipasa sa . Tulad ng para sa , kami ay dapat na gayahin ang gastos ng ETH tawag sa Optimismo sa balanse ng gumagamit. Gayunpaman, ang balanse ng ETH ng gumagamit ay hindi sapat, tandaan mo Kaya ang anumang tawag sa OP mainnet provider at address ng gumagamit ay error.depositTransaction(...)address touint256 valueaddress touint64 gasLimitestimateGas
Dahil dito, iminumungkahi namin na matuklasan ang isang static na guestimate sa pamamagitan ng, hal., pagtawag sa function nang manu mano at gamitin ang halaga na ito sa code.mintWithRewards(...)
Tulad ng para sa iba pang mga argumento, ay at sa wakas ay naglalaman ng data ng tawag na nabuo sa hakbang 3.1.bool isCreationfalsebytes memory data
import { prepareWriteContract } from "@wagmi/core";
import { mainnet } from "wagmi/chains";
const optimismPortalAddress = 0x…;
const optimismPortalABI = [{...}, …];
async function writeToDeposit(nftAddress, price, data) {
const isCreation = false;
const gasLimit = 170000;
return await prepareWriteContract({
address: optimismPortalAddress,
abi: optimismPortalABI,
functionName: "depositTransaction",
args: [nftAddress, price, gasLimit, isCreation, data],
value: price,
chainId: mainnet.id,
});
}
3.3. Importante, kailangan nating magdeposito ng kahit amount of or more as to the L1 call. Tinitiyak nito na ang ilang Ether ay idineposito sa Optimismo at ginawang magagamit para sa tawag. Ginagawa natin ito sa pamamagitan ng pagtatakda sa halaga ng .uint256 valuemsg.valuemintWithRewards(...)msg.valueprice
3.4. Sa wakas, pagkakaroon ng lahat ng mga argumento na natipon, hinihimok namin ang gumagamit na lagdaan ang transaksyong ito para sa Ethereum mainnet.
import { useContractWrite } from "wagmi";
// …
function prepareL2Call(...) {...}
async function writeToDeposit(...) {...}
// …
const BuyButton = (props) => {
// …
const { write } = useContractWrite(config);
// …
return (
<button disabled={!write} onClick={() => write?.()}>
Buy NFT
</button>
);
}
At iyon na! Iyon ang kailangan mong gawin kung nais mong atomically mint ang isang NFT sa Optimismo habang paglalaan ng tawag nang direkta mula sa Ethereum mainnet.
Habang ang mga snippet ng code ay hindi eksakto ang code ng produksyon na ginagamit namin sa Kiwi News, napakalapit nila sa code na binuksan namin. Maaari mong mahanap ang buong pagkakasunud sunod ng paghahanda at higit pa sa aming GitHub. At maaari mong aktwal na subukan ito nang direkta sa pamamagitan ng pagpunta sa aming NFT minting page.
Ngayon, tiyak, ang paggamit ng function ng OptimismPortal ay hindi lamang ang pagpipilian para sa pagpunta mula sa L1 hanggang L2. Sa puntong ito, maraming mga palitan na nag aalok ng mga katulad na serbisyo, masyadong. Gayunpaman, ang isang espesyalidad ng OP Portal ay na pinapanatili nito ang ng address na iyon na nilagdaan at ipinadala ang transaksyon sa ETH mainnet. Ito ay maaaring maging partikular na mahalaga kapag ang iyong dapp ay umaasa sa address na iyon na kailangang maging lehitimong.depositTransaction(...)msg.sender
Kapag nag migrate ang aming NFT mula sa Ethereum sa OP Mainnet, kailangan namin ng isang paraan upang mag tap sa L1 likido habang pinapayagan pa rin ang lahat ng aming mga gumagamit na mint ito mula sa OP Mainnet pati na rin.
Ang OptimismPortal ay nagbibigay ng isang maginhawang pag andar sa parehong mga pondo ng tulay at isagawa ang isang ETH tawag sa isang solong atomic transaksyon, na nagpapagana ng isang mataas na pagkakataon ng tagumpay kapag ang isang gumagamit ay nagpapadala ng tawag.
Idinetalye namin ang aming React.js code, na sumusuri sa parehong Ethereum at L2 balanse upang magbigay ng tamang tawag para sa bawat gumagamit. Kung ang isang gumagamit ay walang OP ETH, makakakuha sila ng direktang onboarded sa pamamagitan ng bridging sa pamamagitan ng Portal.
Sa hinaharap, inaabangan namin ang mas kapana panabik na mga teknikal na pagkakataon. Halimbawa, gustung gusto naming magagawang atomically tap sa likido ng Base chain na may isang katulad na transaksyon ng Portal bilang upang gawing mas madaling tawagan ang aming code para sa lahat ng mga gumagamit ng Ethereum.
Umaasa kami na natagpuan mo ang post na ito na kapaki pakinabang sa iyong trabaho. Sa Kiwi News, lagi kaming nagsisikap na paglingkuran ang ecosystem nang may maraming utility hangga't kaya namin—maging sa pinakabagong balita, blog post, o GitHub repositories. Gusto naming sumakay ka bilang mambabasa! Check mo kami sa https://kiwinews.xyz.
No activity yet