API'lerin Detayları: ERTP ve Zoe
API kullanımı ile ilgili örnekler verelim.
Aşağıdaki kod örneğinde, @agoric/eventual-send
ve @agoric/ertp
modüllerini kullanarak ERTP'nin bir örneği olan TokenX'in bir yayıncısını (issuer
) ve bir madeni parasını (mint
) oluşturuyoruz. Daha sonra, makeEmptyPurse()
yöntemini kullanarak bir cüzdan oluşturuyoruz. AmountMath.make()
yöntemiyle 10 TokenX miktarında bir varlık oluşturuyoruz ve bunu cüzdana deposit()
yöntemiyle yatırıyoruz.
Daha sonra, aynı miktarda varlığı cüzdandan withdraw()
yöntemiyle çekiyoruz. Bu örnek aynı zamanda Zoe ve akıllı sözleşmeler için bir kullanım örneği göstermektedir. getMinimumOffer()
yöntemini kullanarak davetiyenin minimum teklif miktarını alıyoruz ve oluşturduğumuz varlık için bir teklif hazırlıyoruz. Nesne, offer()
yöntemi aracılığıyla Zoe'ye sunuluyor.
const { makeZoe } = require('@agoric/zoe');
async function start() {
const zoe = makeZoe();
const invitationIssuer = zoe.getInvitationIssuer();
const proposalIssuer = zoe.getProposalIssuer();
const inviteAmountMath = zoe.getAmountMath(invitationIssuer);
const proposalAmountMath = zoe.getAmountMath(proposalIssuer);
const exchangeInstallationHandle = await zoe.install(contractBundle);
const {
publicFacet: { makeInvite }
} = await zoe.startInstance(
exchangeInstallationHandle,
{
Asset: inviteAmountMath.make(10),
Price: proposalAmountMath.make(1),
Timer: 10000n // 10 seconds
}
);
const invitation = await makeInvite();
console.log(invitation.getExpression());
}
Aşağıdaki kod örneğinde ise , @agoric/zoe
modülünü kullanarak Zoe'yi başlatıyoruz. getInvitationIssuer()
ve getProposalIssuer()
yöntemleriyle davetiye ve teklif yayıncılarını oluşturuyoruz.
Daha sonra, getAmountMath()
yöntemini kullanarak her iki sorumluluğun miktar matematiğini alıyoruz. Exchange sözleşmesini kurmak ve başlatmak için install()
ve startInstance()
yöntemlerini kullanıyoruz.
En sonunda, makeInvite()
yöntemiyle bir davetiye oluşturuyoruz ve bunun ifadesini yazdırıyoruz.
const { makeZoe } = require('@agoric/zoe');
async function start() {
const zoe = makeZoe();
const invitationIssuer = zoe.getInvitationIssuer();
const proposalIssuer = zoe.getProposalIssuer();
const inviteAmountMath = zoe.getAmountMath(invitationIssuer);
const proposalAmountMath = zoe.getAmountMath(proposalIssuer);
const exchangeInstallationHandle = await zoe.install(contractBundle);
const {
publicFacet: { makeInvite }
} = await zoe.startInstance(
exchangeInstallationHandle,
{
Asset: inviteAmountMath.make(10),
Price: proposalAmountMath.make(1),
Timer: 10000n // 10 seconds
}
);
const invitation = await makeInvite();
console.log(invitation.getExpression());
}
Aşağıdaki kod, Electronic Rights Transfer Protocol (ERTP) adlı bir protokol üzerinde çalışır ve belirli bir miktar varlık yaratmak veya bir hesaptan başka bir hesaba varlık transfer etmek için kullanılabilir.
// Belirtilen miktarda yeni bir varlık oluşturun
function createAsset(miktar) {
var varlik = new Varlik(miktar);
return varlik;
}
// Bir hesaptan diğerine varlık transferi yapın
function transferAsset(gonderenHesap, alanHesap, varlik) {
if (gonderenHesap.bakiye >= varlik.miktar) {
gonderenHesap.bakiye -= varlik.miktar;
alanHesap.bakiye += varlik.miktar;
} else {
throw new Error("Yetersiz bakiye.");
}
}
Aşağıdaki kod ise kod, Zoe API'leri kullanarak ERTP ile etkileşimde bulunur. Kod, bir Zoe sözleşmesi başlatır, sonra iki farklı varlık türü (moola ve euros) yaratır ve ardından 10 moola'yı 5 euro karşılığında takas etmek için bir teklif oluşturur. Daha sonra davetiye alır, teklifi depolar ve son olarak geri dönen varlıkları çeker.
import { ERTPTypes, makeERTP } from '@agoric/ertp';
import { makeZoe } from '@agoric/zoe';
async function run() {
const zoe = makeZoe();
const moola = makeERTP('moola');
const euros = makeERTP('euros');
// Yeni bir sözleşme oluşturun ve publicFacet'ini alın
const { publicFacet } = await zoe.startInstance(contract);
// 10 moola'yı 5 euro karşılığında takas etmek için yeni bir teklif oluşturun
const teklif = harden({
give: { Asset: moola.mint.mintPayment(moola(10)) },
want: { Price: euros.mint.mintPayment(euros(5)) },
});
// Takas için davetiye alın
const davetiye = await publicFacet.makeInvitation();
// Teklifi depolayın ve davetiye kabul edin
const islem = await zoe.offer(davetiye, teklif);
// Geri dönen varlıkları çekin
const odeme1 = await islem.getPayout('Asset');
const odeme2 = await islem.getPayout('Price');
}