Ajan Ödeme Yığını: Referans Mimari
Dört zincir üstü ilkel. Üç birleştirilebilir akış. Tek bir API çağrısından tam bir topluluk para birimine kadar, Ergo üzerinde ajandan ajana ödemeler oluşturmak için ihtiyacınız olan her şey.
Dört İlkel
Reserve · Note · Tracker · Predicate
Reserve
Sermaye desteği
ERG veya tokenleri teminat olarak tutan zincir üstü sözleşme. Herkes reserve oranını istediği zaman doğrulayabilir. Reserve bankadır — aracı yoktur.
- ERG / yerel tokenler tutar
- Her zaman denetlenebilir
- Note ihracını 1:1 veya kısmi olarak destekler
- İtfa sözleşme ile zorunlu kılınır
{
// Reserve contract: allow withdrawal only
// if redemption note is burned
val noteBox = INPUTS(1)
val burnCheck = noteBox.tokens.size == 0
sigmaProp(burnCheck && SELF.R4[Long].get > 0)
}Note
Programlanabilir IOU
Bir Reserve karşısında talebi temsil eden hamiline ait token. Note transferedilebilir, bölünebilir ve itfa edilebilir. Kabul Predicate kimin Note alıp itfa edebileceğini tanımlar.
- Hamiline ait araç — kimlik gerekmez
- Eşler arası transfer edilebilir
- Reserve sözleşmesine karşı itfa edilebilir
- Herhangi bir tokenle nominal değer
{
// Note: transferable by holder,
// redeemable against reserve
val holder = SELF.R4[GroupElement].get
val isHolder = proveDlog(holder)
val isRedemption = INPUTS.exists { box =>
box.tokens.exists(_._1 == reserveId)
}
isHolder || isRedemption
}Tracker
Zincir üstü muhasebe
Bir Reserve den ihraç edilen tüm Note lar genelinde kümülatif bakiyeleri, kredi kullanımını ve itfa geçmişini izler. Herkesin doğrulayabileceği halka açık bir defter olarak düşünün.
- Toplam ihraç vs itfa edileni izler
- Kredi limitlerini uygular
- Halka açık denetlenebilir
- Diğer sözleşmelerle birleştirilebilir
{
// Tracker: ensure running total
// doesn't exceed credit limit
val limit = SELF.R4[Long].get
val used = SELF.R5[Long].get
val newUsed = used + INPUTS(0).value
sigmaProp(newUsed <= limit)
}Acceptance Predicate
Programlanabilir güven kuralı
Bir ajanın Note u ödeme olarak kabul edeceği koşul. Koşullar görev hash doğrulaması, son tarih kontrolleri, kimlik kanıtları veya herhangi bir zincir üstü veriyi içerebilir.
- Rastgele kabul koşulları
- Görev hash doğrulaması
- Son tarih uygulaması
- Sigma kanıtlarıyla birleştirilebilir
{
// Accept note only if:
// 1. Task hash matches R4
// 2. Deadline not passed
val taskHash = SELF.R4[Coll[Byte]].get
val deadline = SELF.R5[Int].get
val inputHash = INPUTS(0).R4[Coll[Byte]].get
val onTime = HEIGHT <= deadline
sigmaProp(taskHash == inputHash && onTime)
}Örnek Akışlar
Üç birleştirilebilir akış
Akış A: Ajan API çağrısı satın alır
Bir çağrı. Bir kanıt. Kalıcı hesap yok.
- 1
Ajan Note oluşturur
0.001 ERG nominal değer, R4 te sağlayıcı adresi
- 2
Sağlayıcı Predicate i kontrol eder
Note değerini, Reserve desteğini, son tarihi doğrular
- 3
Sağlayıcı yanıt iletir
API sonucunu döndürür, Note u harcandı olarak işaretler
- 4
Uzlaşma
Note yakılır, ERG Reserve den sağlayıcıya serbest bırakılır
// Fleet SDK: create a note for API payment
import { TransactionBuilder, OutputBuilder, SAFE_MIN_BOX_VALUE } from "@fleet-sdk/core"
const noteBox = new OutputBuilder(
1_000_000n, // 0.001 ERG
NOTE_CONTRACT_ADDRESS
)
.setAdditionalRegisters({
R4: SGroupElement(providerPubKey), // recipient
R5: SLong(BigInt(HEIGHT + 100)), // deadline
R6: SColl(SByte, taskHashBytes), // task identifier
})
const tx = new TransactionBuilder(currentHeight)
.from(inputs)
.to(noteBox)
.sendChangeTo(agentAddress)
.payMinFee()
.build()Akış B: Ajan krediyle öder
Reserve dağıtılır. Note lar ihraç edilir. Tracker izler.
- 1
Reserve dağıt
ERG yi kredi limiti ile Reserve sözleşmesine kilitle
- 2
Note ları ihraç et
Kredi limitine kadar Reserve e karşı Note oluştur
- 3
Ajan Note ları harcar
Note lar sağlayıcılara transfer edilir, Tracker güncellenir
- 4
Otomatik uzlaşma
Eşik aşıldığında Reserve ödenmemiş Note ları kapatır
// Deploy a reserve with 10 ERG, 100 ERG credit limit
const reserveBox = new OutputBuilder(
10_000_000_000n, // 10 ERG collateral
RESERVE_CONTRACT_ADDRESS
)
.setAdditionalRegisters({
R4: SLong(100_000_000_000n), // 100 ERG credit limit
R5: SLong(0n), // issued so far
R6: SGroupElement(ownerKey), // reserve controller
})
// Issue a note against the reserve
const noteBox = new OutputBuilder(
1_000_000_000n, // 1 ERG face value
NOTE_CONTRACT_ADDRESS
)
.setAdditionalRegisters({
R4: SGroupElement(agentKey), // holder
R5: SColl(SByte, reserveId), // backing reserve
})Akış C: Topluluk Reserve + Tracker
Yerel pazar yeri, hesaplama kooperatifi, ajan ağı.
- 1
Topluluk Reserve dağıtır
Topluluk üyeleri ERG yi havuzlar
- 2
Topluluk Note ları ihraç edilir
Üyeler katkılarıyla orantılı Note alır
- 3
Yerel ticaret
Note lar topluluk içinde kabul edilir, Predicate ler kuralları tanımlar
- 4
İtfa
Üyeler her zaman Reserve den ERG karşılığında Note ları itfa edebilir
// Community reserve: multiple funders
const communityReserve = new OutputBuilder(
TOTAL_POOLED_ERG,
MULTISIG_RESERVE_CONTRACT
)
.setAdditionalRegisters({
R4: SColl(SGroupElement, memberKeys), // governance
R5: SInt(3), // 3-of-5 threshold
R6: SColl(SByte, communityTokenId), // community token
})
// Acceptance predicate: only members of community
const memberPredicate = `{
val isMember = CONTEXT.dataInputs(0)
.R4[Coll[GroupElement]].get
.exists(pk => proveDlog(pk))
sigmaProp(isMember)
}`SDK lar ve Araçlar
Bugün inşa etmeye başlayın
Fleet SDK
TypeScript / JS
Tarayıcınızda veya Node.js de işlem oluşturun. Ajan ödemeleri için en iyi başlangıç noktası.
sigma-rust
Rust
Yüksek performanslı imzalama ve serileştirme. Üretim ajan altyapısı için ideal.
Mevcut durum
Yığın durumu
Beş katman canlı. İkisi açık problem. GitHub daki sohbete katılın — bunlar ajan parasındaki en ilginç çözülmemiş problemlerdir.