Cüzdan Objesi
Cüzdanlar, dijital varlıkları tutan yapılardır. Bir ** için oluşturulurlar ve bir Cüzdanın tuttuğu Marka değiştirilemez. Örneğin, eğer Quatloos tutan bir Cüzdan oluşturursanız, bu Cüzdan** asla Moola, tiyatro biletleri veya herhangi başka bir Quatloo dışı varlık türünü tutamaz.
Cüzdanlar içinde bulunan dijital varlıklar şunlar olabilir:
- Para benzeri varlıklar, örneğin hayali Quatloos para birimimiz.
- Mallara benzer dijital varlıklar, örneğin tiyatro biletleri veya bir oyunda kullanılan sihirli silahlar.
- Belirli bir sözleşmeye katılma hakkı gibi diğer haklar.
Her Cüzdan yalnızca bir Markanın varlıklarını tutabilecekken, o Markayı tutan sayısız Cüzdan oluşturulabilir. Örneğin, siz üç tane Quatloos Cüzdanına sahip olabilirken, arkadaşınız Alice sekiz tane Quatloos Cüzdanına sahip olabilir.
Cüzdanlar, yeni Cüzdanın tutacağı varlıkların Markasına bağlı olan **** yöntemini çağırarak oluşturulur.
const { issuer: quatloosIssuer } = makeIssuerKit('quatloos');
const quatloosPurse = quatloosIssuer.makeEmptyPurse();
Bir Cüzdanın bakiyesini değiştirmek için ya ** ya da ** çağrısını yapmalısınız. Bir Cüzdan boş olabilir; eğer bir değiştirilebilir para birimi tutuyorsa değeri 0 olur. Eğer bir değiştirilemez varlık (örneğin tiyatro biletleri) tutuyorsa, o zaman Cüzdan boşsa hiçbir varlık içermez.
**'den farklı olarak, Cüzdanlar başkalarına gönderilmek üzere tasarlanmamıştır. Dijital varlıkları aktarmak için bir Cüzdandan Ödeme çekmeli ve bu Ödemeyi** başka bir tarafa göndermelisiniz.
aPurse.getCurrentAmount()
- Dönüş: ****
Döndürülen Miktar, Cüzdanın mevcut bakiyesini gösterir. Döndürülen Miktar ** boş olabilir ve aynı Cüzdan üzerinde aPurse.getCurrentAmount()** çağrısını yaptığınızda varlıklar yatırılıp çekildiği için farklılık gösterebilir.
const { issuer: quatloosIssuer } = makeIssuerKit('quatloos');
const quatloosPurse = quatloosIssuer.makeEmptyPurse();
// quatloos5, 5 quatloos bakiyesine sahip bir ödemedir
const quatloosPurse.deposit(quatloos5);
// Değeri 5 ve markası quatloos olan bir miktar döndürür
const currentBalance = quatloosPurse.getCurrentAmount();
aPurse.getCurrentAmountNotifier()
- Dönüş: Notifier<>
Bu Cüzdanın bakiyesindeki değişiklikler için kayıplı bir bildirimci döndürür. Daha fazla ayrıntı için sayfasına bakın.
const notifier = purse.getCurrentAmountNotifier();
let nextUpdate = notifier.getUpdateSince();
const checkNotifier = async () => {
const { value: balance, updateCount } = await nextUpdate;
nextUpdate = notifier.getUpdateSince(updateCount);
};
aPurse.deposit(payment, optAmount?)
- payment: ****
- optAmount: **** - Opsiyonel.
- Dönüş: Miktar
Tamamı Cüzdana yatırılan Ödemenin içeriğini açıklayan bir Miktar döndürür (yani yatırılan miktar). Eğer opsiyonel argüman optAmount Ödemenin bakiyesine eşit değilse veya Ödeme bir promise ise, bu yöntem bir hata fırlatır.
Yukarıdaki durum hem yerel hem de uzak Cüzdanlar için geçerlidir; ancak uzaktaki Cüzdanlar için bu işlem, promise'lerin ve asenkronluğun kullanılması nedeniyle etkiler yaratabilir. aPurse.deposit() çağrısından önce bir promise olmayan bir Ödemeye sahip olmalısınız. aPurse.deposit() çağrısı yaptığınızda, başarı durumunu size bildiren bir cevap alırsınız (gidiş-dönüş için bekledikten sonra). Sonradan gelen tüm çağrılar, varlıkların Cüzdana aktarıldığını görür ve Ödeme artık geçerli değildir.
Eğer herhangi bir çekim, promise'lerin sonuçlanmasını bekliyorsa, bir yatırma işlemi onları geçebilir. Bu güvenlidir; çünkü tüm varlıklar çekilse bile, yatırma işlemi boş bir Cüzdanda çalışır.
const {
issuer: quatloosIssuer,
mint: quatloosMint,
brand: quatloosBrand
} = makeIssuerKit('quatloos');
const quatloosPurse = quatloosIssuer.makeEmptyPurse();
const payment = quatloosMint.mintPayment(AmountMath.make(quatloosBrand, 123n));
const quatloos123 = AmountMath.make(quatloosBrand, 123n);
// Cüzdan'a 123 Quatloos değeri için bir ödeme yatırın.
const depositAmountA = quatloosPurse.deposit(payment, quatloos123);
const secondPayment = quatloosMint.mintPayment(
AmountMath.make(quatloosBrand, 100n)
);
// Hata verir
const depositAmountB = quatloosPurse.deposit(secondPayment, quatloos123);
aPurse.withdraw(amount)
- amount: ****
- Dönüş: ****
Belirtilen Miktarda dijital varlıkları Cüzdandan yeni bir Ödeme nesnesine çeker.
Eğer çağrınız başarıyla gerçekleşirse, hemen yeni bir Ödeme oluşturur. Çağrıyı yapan kişi yeni Ödemeyi, çağrı siparişi işlenene kadar almaz; çünkü çağrı (neredeyse her zaman) uzaktadır. Ancak mesaj işlendikten sonra, değer Cüzdandan gitmiştir.
// Bir Cüzdan oluşturun ve ona 10 Quatloos bakiyesini verin
const { issuer, mint, brand } = makeIssuerKit('quatloos');
const purse = issuer.makeEmptyPurse();
const payment = mint.mintPayment(AmountMath.make(brand, 10n));
const quatloos10 = AmountMath.make(brand, 10n);
purse.deposit(payment, quatloos10);
// Cüzdandan 3 miktarını çek
const quatloos3 = AmountMath.make(brand, 3n);
const withdrawalPayment = purse.withdraw(quatloos3);
// Çekim ödemesinin bakiyesi 3 Quatloos
issuer.getAmountOf(withdrawalPayment);
// Cüzdanın yeni bakiyesi 7 Quatloos
purse.getCurrentAmount();
aPurse.getAllegedBrand()
- Dönüş: ****
Cüzdanın tutmayı öne sürdüğü dijital varlık türünü belirten bir iddia markası döndürür (Not: bir Marka, allegedName() yönteminin döndürdüğü bir String değil).
const purseBrand = quatloosPurse.getAllegedBrand();
aPurse.getDepositFacet()
- Dönüş: DepositFacet
Diğer tarafların Cüzdana ** yatırmasına izin veren yeni bir yalnızca yatırma yönü olan Cüzdana ait DepositFacet oluşturur ve döndürür. Bu, diğer insanların size Ödemeleri** göndermesinin güvenli bir yolu haline gelir.
Bir DepositFacet'e yalnızca, Cüzdan'ın tuttuğu ile aynı **da olan bir Ödeme** yatırılabilir.
const depositOnlyFacet = purse.getDepositFacet();
// depositOnlyFacet'i bir başkasına verin. Deposit facet referansına sahip olan herkes, bir ödemeyi alması için onu yönlendirebilir, böylece ödeme varlıkları deposit facet ile ilişkili Cüzdan'a yatırılır.
depositOnlyFacet.receive(payment);
Bir DepositFacet oluşturduktan sonra, onun üzerinde çağırabileceğiniz bir yöntem vardır: **. DepositFacet, bir Ödeme alır ve bunu Cüzdan'ın bakiyesine ekler. Ödeme, Cüzdanın tuttuğu ile aynı Marka**da olmalıdır.
Bir Cüzdan ile onun DepositFaceti arasındaki varlık ekleme yöntemleri arasındaki farkı unutmayın. Cüzdana doğrudan varlık eklemek için aPurse.deposit() kullanırsınız. Bir Cüzdana varlık eklemek için onun DepositFaceti üzerinden aDepositFacet.receive() kullanırsınız.
aDepositFacet.receive(payment, optAmount?)
- payment: ****
- optAmount: **** - Opsiyonel.
- Dönüş Miktar
DepositFacet, Ödemeyi alır ve bunu DepositFacet'in ilişkili Cüzdan'ının bakiyesine ekler.
Eğer opsiyonel argüman optAmount Ödemenin bakiyesi ile eşit değilse veya Ödeme çözümlenmemiş bir promise ise, bu yöntem bir hata fırlatır.
const depositOnlyFacet = purse.getDepositFacet();
// depositOnlyFacet'i bir başkasına verin. Deposit facet referansına sahip olan herkes, bir ödemeyi alması için onu yönlendirebilir, böylece ödeme varlıkları deposit facet ile ilişkili Cüzdan'a yatırılır.
depositOnlyFacet.receive(payment);