Home - LudexCS/LudexWeb3Integration GitHub Wiki
ํด๋น ํ์ด์ง๋ Ludex์ Web3Integration Library์ ์ฌ์ฉ๋ฒ์ ๋ฌธ์ํํ ์ํค์ ๋ฉ์ธ ํ์ด์ง์ด๋ค. Ludex ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Ludex ํ๋ซํผ๊ณผ ์ํธ์์ฉ์ ์บก์ํํ ํ์ ๋ค๊ณผ ๊ทธ ์์ฑ ํจํด์ ์ ๊ณตํ๋ค.
import * as ludex from "ludex";
let chainConfig: ludex.configs.ChainConfig = {
// .. your configuration
};
async function connectBrowserWallet()
{
return await ludex.BrowserWalletConnection.create(chainConfig);
}
- IReadonlyFacade ์ฐธ์กฐ
import * as ludex from "ludex";
import { ethers } from "ethers";
let chainConfig: ludex.configs.ChainConfig = {
// .. your configuration
};
let ludexConfig: ludex.configs.LudexConfig = {
// .. your configuration
};
async function showItemPrice (itemID: bigint)
{
let facade = ludex.facade.createWeb2UserFacade(chainConfig, ludexConfig);
let priceTable = facade.readonlyAccessPriceTable();
let itemPrice: ludex.structs.PriceInfo[] = await priceTable.getPriceInfoList(itemID);
for (let price of itemPrice)
{
console.log(`In token(${price.token}): ${price.tokenAmount}`);
}
}
- IMetaTXFacade ์ฐธ์กฐ
import * as ludex from "ludex";
let chainConfig: ludex.configs.ChainConfig = {
// .. your configuration
};
let ludexConfig: ludex.configs.LudexConfig = {
// .. your configuration
};
let forwarderAddress: ludex.Address = ludex.Address.create("Contract Address of forwarder");
let tokenAddress: ludex.Address = ludex.Address.create("Contract Address of payment token");
async function sendPurchaseItemRequest (itemID: bigint, connection: ludex.BrowserWalletConnection)
{
let signer = await connection.getSigner();
let facade = ludex.facade.createWeb3UserFacade(chainConfig, ludexConfig, signer, forwarderAddress);
let store = facade.metaTXAccessStore();
let purchaseRequest: ludex.relay.RelayRequest<bigint> =
store.purchaseItemRequest(itemID, tokenAddress, BigInt(3600)/*an hour*/);
let response: any = await (// send purchase request to back-end, and get reponse);
let tokenID: bigint|null = purchaseRequest.onResponse(response);
}
import * as ludex from "ludex";
import { ethers } from "ethers";
let forwarderAddress: ludex.Address = ludex.Address.create("Contract Address of forwarder");
let ludexConfig: ludex.configs.LudexConfig = {
// .. your configuration
};
let provider = new ethers.JsonRpcProvider("Private Json Rpc Url");
let wallet = new ethers.Wallet("Private Key", provider);
let relayer = ludex.relay.createLudexRelayeMaster(ludexConfig, forwarderAddress, wallet);
async function acceptRelayRequest()
{
let request: any = await (/* request getter code via API */);
let sendResponse = async (response: any) => {/* sending response to front-end*/};
let onError = () => {/* error handling */ };
await relayer.acceptRequest(request, sendResponse, onError);
}
- ChainConfig: ์ฐ๊ฒฐํ ๋ธ๋ก์ฒด์ธ ๋คํธ์ํฌ๋ฅผ ์ค์ ํ๋ Configuration์ ์ฑ ์์ง๋ ํ์
- LudexConfig: Ludex ํ๋ซํผ์์ ์๋ํ๋ ์ค๋งํธ ์ปจํธ๋ํธ๋ค์ ์ฃผ์๋ฅผ ๋ด์ ํ์
- Address๋ ์ปจํธ๋ํธ์ ์ฃผ์ ๋ฌธ์์ด ๊ฐ์ ๋ด๋ ๋ํผ ํ์ ์ด๋ค
- Address์ ์ธ์คํด์ค ์์ ๋ํ๋ ์ฃผ์ ๋ฌธ์์ด ๊ฐ์ ์ด๋๋ฆฌ์ ์ฃผ์ ํฌ๋งท์์ด ๋ณด์ฅ๋๋ค
- ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋
Address.create(stringValue: string)
์ ์ฌ์ฉํ์ฌ ์์ฑํ๋ค
- Connection์ ์น3 ์ง๊ฐ(๋ฉํ๋ง์คํฌ/๋ธ๋ ์ด๋ธ) ์ฐ๊ฒฐ์ ์บก์ํํ ํ์ ์ด๋ค
- ๋น๋๊ธฐ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋
BrowserWalletConnection.create(chaingConfig: ChainConfig)
๋ฅผ ์ฌ์ฉํ๋ค
- Access๋ ๋ธ๋ก์ฒด์ธ ์์ ํน์ ์ปจํธ๋ํธ์ ์ ๊ทผํ์ฌ ์ปจํธ๋ํธ์ ํจ์๋ฅผ ํธ์ถํ๋ ์ธํฐํ์ด์ค๋ค์ ์ ๊ณตํ๋ค
- Access๋ ๋ค ๊ฐ์ง์ ์ ๊ทผ ํจํด์ผ๋ก ๊ตฌ๋ถํ๋ค
- Readonly: ๊ฑฐ๋๋ ์ ๋ณด ๋ณ๊ฒฝ์ ์ํํ ์ ์๋, ์ ๋ณด ํ์ธ๋ง์ ์ํ ์ ๊ทผ ์ธํฐํ์ด์ค
- MetaTX: ๋ฉํํธ๋์ญ์ ์ ํตํ ๊ฑฐ๋๋ฅผ ์ํํ ์ ์๋, ์ผ๋ฐ Web3 ์ด์ฉ์๋ฅผ ์ํ ์ ๊ทผ ์ธํฐํ์ด์ค
- Admin: ๊ด๋ฆฌ์ ๊ณ์ ๊ธฐ๋ฅ์ ์ํํ ์ ์์ผ๋ฉฐ, ์ง์ ๊ฐ์ค๋ฅผ ์ง๋ถํ๋ ์ ๊ทผ ์ธํฐํ์ด์ค
- Service: ์๋ฒ ์์์ ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์บก์ํํ, ์ง์ ๊ฐ์ค๋ฅผ ์ง๋ถํ๋ ์ ๊ทผ ์ธํฐํ์ด์ค
- ๋ชจ๋ Access๋ Readonly์ ๊ธฐ๋ฅ์ ์์ํ๋ค
- Service๋ Admin์ ๊ธฐ๋ฅ์ ์์ํ๋ค
- ๊ฐ ์ ๊ทผ ํจํด ๋ณ๋ก, Ludex ํ๋ซํผ์์ ์ ๊ณตํ๋ ์ปจํธ๋ํธ๋ค์ ๋ํ Access๊ฐ ์กด์ฌํ๋ค
- ์) ILedgerMetaTXAccess๋ Ledger ์ปจํธ๋ํธ์ ์ํธ์์ฉํ๋ฉฐ ์ค์ ํ ํฐ ๊ฒฐ์ ๋ฅผ ์ํํ ์ ์๋ ์ ๊ทผ ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธํ๋ค
- ๊ฐ๊ฐ์ ์ปจํธ๋ํธ์ ๋ํ Access ํ์ ๋ค์ ํ๋จ์ Contracts ํญ๋ชฉ ํน์ ๊ฐ Facade์ ํ์ด์ง๋ฅผ ์ฐธ์กฐ
- Facade๋ ๋ค ๊ฐ์ง์ ์ ์ ํจํด ๋ณ๋ก Access๋ค์ ์์ฑํ๋ ์ฑ ์์ ๋งก๋ ํ์ ๋ค์ด๋ค
- ๊ฐ Facade๋ ์ ์ ํจํด์ ๋์ํ์ฌ ์ ์๋ Access์ ์์ฑ์ ์ํํ๋ ํจ์๋ค์ ๊ฐ์ง๊ณ ์๋ค
- Type ์ผ๋
- IReadonlyFacade: Readonly ์ ์ ํจํด์ Access๋ค์ ์์ฑ ์ฑ ์์ ๋งก๋๋ค
- IMetaTXFacade: MetaTX ์ ์ ํจํด์ Access๋ค์ ์์ฑ ์ฑ ์์ ๋งก๋๋ค
- IAdminFacade: Admin ์ ์ ํจํด์ Access๋ค์ ์์ฑ ์ฑ ์์ ๋งก๋๋ค
- IServiceFacade: Service ์ ์ ํจํด์ Access๋ค์ ์์ฑ ์ฑ ์์ ๋งก๋๋ค
- ์) IAdminFacade์ adminAccessPriceTable() ํจ์๋ฅผ ํตํด, IPriceTableAdminAccess ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ค.