Sistem Perdagangan Pertukaran Lokal Di Atas Ergo

This page is machine-translated.
Alex Chepurnoy

22 April 2019

Sistem perdagangan pertukaran lokal (LETS) adalah asosiasi kredit mutual lokal yang memungkinkan anggotanya untuk menciptakan uang kredit bersama secara individu, dengan semua transaksi dalam sistem dicatat dalam buku besar bersama. Sebagai contoh, anggaplah Alice dengan saldo nol bersedia membeli satu liter susu mentah dari Bob. Pertama, mereka sepakat pada harga, misalnya, anggaplah harga sekitar 2 Euro (karena Alice dan Bob tinggal di Irlandia). Setelah transaksi dicatat dalam buku besar, saldo Alice menjadi -2 (minus dua) Euro, dan saldo Bob menjadi 2 Euro. Kemudian Bob dapat menghabiskan 2 Euro-nya, misalnya, untuk bir buatan rumah dari Charlie. Seringkali, sistem semacam itu memberlakukan batasan pada saldo negatif, dan kadang-kadang bahkan pada saldo positif, untuk mendorong pertukaran dalam komunitas.

Secara historis, sistem semacam itu menjadi populer selama masa krisis. Sistem pertama didirikan oleh Michael Linton di sebuah kota Kanada yang terjebak dalam depresi pada tahun 1981. Sistem perdagangan pertukaran lokal sangat populer selama Depresi Besar Argentina 1998-2002. Sebagian besar kelompok LETS berkisar antara 50 hingga 250 anggota, dengan catatan kredit berbasis kertas dan buku besar yang dikelola oleh komite inti. Namun, mata uang LETS berbasis kertas telah menunjukkan beberapa masalah, seperti uang palsu, kemungkinan perilaku nakal dari pengelola sistem, dan sebagainya. Oleh karena itu, LETS berbasis blockchain bisa lebih unggul dibandingkan sistem lama. Informasi lebih lanjut tentang LETS dapat ditemukan di
"The Ecology of Money" book (oleh Richard Douthwaite) dan
Wikipedia.

Dalam artikel ini kami menunjukkan bagaimana LETS dapat diimplementasikan di atas Ergo. Sejauh yang kami ketahui, ini adalah
implementasi pertama dari jenis mata uang komunitas semacam ini di atas blockchain.
Implementasi referensi kami
sederhana dan terdiri dari dua kontrak, yaitu, kontrak manajemen dan kontrak pertukaran.
Kami melewatkan prasyarat Ergo, jadi silakan baca
artikel ICO dan
tutorial ErgoScript (dasar dan
lanjutan) untuk pemula.
Namun, kami akan memperkenalkan beberapa istilah baru dalam kalimat berikut.
Jika sebuah token diterbitkan dengan jumlah sama dengan satu, kami menyebutnya token singleton. Demikian pula,
satu kotak yang berisi token singleton disebut kotak singleton.

Kontrak manajemen mengontrol kotak singleton yang menyimpan anggota sistem LETS.
Kontrak ini memungkinkan penambahan anggota baru dengan kecepatan satu anggota per satu transaksi. Kotak
ini tidak menyimpan anggota, tetapi hanya ringkasan kecil dari struktur data terautentikasi yang dibangun di atas
direktori anggota. Seorang anggota terkait dengan token singleton yang diterbitkan dalam transaksi yang
menambahkan anggota ke direktori. Transaksi tersebut menciptakan kotak anggota baru yang berisi
token singleton anggota. Kotak anggota dilindungi oleh kontrak pertukaran. Selain itu, kotak anggota yang baru
dibuat memiliki saldo awal yang dicatat dalam register R4, dan saldo tersebut
equal dengan nol dalam contoh kami. Transaksi yang menciptakan anggota baru harus memberikan bukti kebenaran untuk
deklarasi direktori.

Kotak kontrak manajemen biasanya dikendalikan oleh sebuah komite, dan komite tersebut dapat berkembang seiring waktu. Untuk mendukung
itu, kami mengizinkan logika komite untuk berada di register R5.
Sebagai contoh, anggaplah bahwa anggota komite baru telah ditambahkan bersamaan dengan anggota LETS baru,
kotak kontrak manajemen input memerlukan 2-dari-3 tanda tangan, dan kotak output memerlukan 3-dari-4 tanda tangan.
Dalam hal ini, isi register R5 di kotak input dan output akan berbeda.

Kode kontrak manajemen dalam ErgoScript dengan komentar disediakan di bawah ini. Harap dicatat bahwa
"userContractHash" adalah tentang hash kontrak pertukaran.

    val selfOut = OUTPUTS(0)
 
    // Skrip manajemen
    val managementScript = selfOut.R5[SigmaProp].get
 
    // Template skrip manajemen mereplikasi diri, dan skrip manajemen terpenuhi
    val scriptCorrect = (selfOut.propositionBytes == SELF.propositionBytes) && managementScript
 
    // Transaksi pengeluaran menciptakan kotak untuk direktori, pengguna, biaya.
    val outsSizeCorrect = OUTPUTS.size == 3
 
    // Memeriksa bahwa token label manajemen mereplikasi diri
    val outTokenCorrect = (selfOut.tokens.size == 1) && (selfOut.tokens(0)._1 == letsToken)
 
    // Memeriksa bahwa token baru diterbitkan, dan jumlahnya benar
    // OUTPUTS(0) token sudah diperiksa melalui outtokenCorrect
    val issuedTokenId = INPUTS(0).id
    val userOut = OUTPUTS(1)
    val correctTokenAmounts =
      (userOut.tokens.size == 1 &&
        userOut.tokens(0)._1 == issuedTokenId &&
        userOut.tokens(0)._2 == 1 &&
        OUTPUTS(2).tokens.size == 0 &&
        outTokenCorrect)
 
    // Memeriksa bahwa pengguna baru telah dibuat dengan saldo nol
    val zeroUserBalance  = userOut.R4[Long].get == 0
 
    val properUserScript = blake2b256(userOut.propositionBytes) == userContractHash
 
    // Memeriksa bahwa pengenal token baru telah ditambahkan ke direktori
    val selfTree = SELF.R4[AvlTree].get
    val toAdd: Coll[(Coll[Byte], Coll[Byte])] = Coll((issuedTokenId, Coll[Byte]()))
    val proof = getVar[Coll[Byte]](1).get
    val modifiedTree = selfTree.insert(toAdd, proof).get
    val expectedTree = selfOut.R4[AvlTree].get
    val treeCorrect = modifiedTree == expectedTree
 
    correctTokenAmounts && scriptCorrect && treeCorrect && zeroUserBalance && properUserScript       
    correctTokenAmounts && scriptCorrect && treeCorrect && zeroUserBalance && properUserScript correctTokenAmounts && scriptCorrect && treeCorrect && zeroUserBalance && properUserScript      

Skrip kontrak pertukaran cukup sederhana dan disediakan di bawah ini bersama dengan komentar yang menjelaskan logikanya. Dalam
kontrak, diasumsikan bahwa transaksi pengeluaran untuk kotak kontrak pertukaran menerima setidaknya dua input,
dan dua input pertama harus dilindungi oleh skrip kontrak pertukaran dan berisi token anggota LETS. Untuk memeriksa
bahwa token anggota singleton dalam input memang milik sistem LETS, transaksi pengeluaran menyediakan kotak kontrak manajemen
sebagai input data baca-saja pertama, dan juga harus memberikan bukti bahwa token anggota memang milik
direktori yang terautentikasi melalui register R4 dari kotak kontrak manajemen. "letsToken" dalam skrip adalah tentang
token singleton dari kotak manajemen.

  // Saldo minimal yang diizinkan untuk pedagang LETS
  val minBalance = -20000

  val lookupProof = getVar[Coll[Byte]](1).get

  // Kotak baca-saja yang berisi direktori anggota LETS
  val treeHolderBox = CONTEXT.dataInputs(0)
  val properLetsToken = treeHolderBox.tokens(0)._1 == letsToken
  val membersTree = treeHolderBox.R4[AvlTree].get

  // Transaksi pengeluaran mengambil dua kotak anggota LETS yang bersedia melakukan kesepakatan,
  // dan mengembalikan kotak dengan saldo yang dimodifikasi.
  val participant0 = INPUTS(0)
  val participant1 = INPUTS(1)
  val participantOut0 = OUTPUTS(0)
  val participantOut1 = OUTPUTS(1)

  //Periksa bahwa anggota memang milik LETS
  val token0 = participant0.tokens(0)._1
  val token1 = participant1.tokens(0)._1
  val memberTokens = Coll(token0, token1)
  val membersExist = membersTree.getMany(memberTokens, lookupProof).forall({ (o: Option[Coll[Byte]]) => o.isDefined })

  // Periksa bahwa perubahan saldo anggota LETS selama kesepakatan adalah benar
  val initialBalance0 = participant0.R4[Long].get
  val initialBalance1 = participant1.R4[Long].get
  val finishBalance0  = participantOut0.R4[Long].get
  val finishBalance1  = participantOut1.R4[Long].get
  val diff0 = finishBalance0 - initialBalance0
  val diff1 = finishBalance1 - initialBalance1
  val diffCorrect = diff0 == -diff1
  val balancesCorrect = (finishBalance0 > minBalance) && (finishBalance1 > minBalance) && diffCorrect

  // Periksa bahwa kotak anggota menyimpan skrip mereka.
  // todo: optimasi dapat dilakukan di sini
  val script0Saved = participantOut0.propositionBytes == participant0.propositionBytes
  val script1Saved = participantOut1.propositionBytes == participant1.propositionBytes
  val scriptsSaved = script0Saved && script1Saved

  // Perlindungan kotak spesifik anggota
  val selfPubKey = SELF.R5[SigmaProp].get

  selfPubKey && properLetsToken && membersExist && diffCorrect && scriptsSaved

Perhatikan bahwa kedua kontrak dapat dimodifikasi dengan banyak cara untuk mendapatkan sistem baru dengan properti yang berbeda. Jadi semoga
suatu hari artikel ini akan dilanjutkan!

Share post

Ergo Infrastructure DAO: Mendekentralisasi Tulang Punggung Ekosistem Ergo

Ergo Infrastructure DAO: Mendekentralisasi Tulang Punggung Ekosistem Ergo

Misi Ergo selalu berakar pada desentralisasi, tidak hanya di lapisan konsensus, tetapi di seluruh tumpukan.

Ergo Platform

13 Agustus 2025

Mew Finance: Alat DeFi yang Menyenangkan untuk Ekosistem Ergo

Mew Finance: Alat DeFi yang Menyenangkan untuk Ekosistem Ergo

Mew Finance adalah rangkaian aplikasi terdesentralisasi di Blockchain Ergo.

Ergo Platform

12 Agustus 2025

Lithos: Mendekentralisasi Penambangan dengan Kolam On-Chain

Lithos: Mendekentralisasi Penambangan dengan Kolam On-Chain

Lithos adalah protokol baru yang dirancang untuk merombak cara kerja kolam penambangan dengan memindahkannya ke on-chain, memberik.

Ergo Platform

24 Juli 2025

Sigma 6.0: Ergo yang Lebih Cerdas dan Fleksibel

Sigma 6.0: Ergo yang Lebih Cerdas dan Fleksibel

Sigma 6.0 adalah peningkatan besar yang diusulkan untuk blockchain Ergo.

Ergo Platform

23 Juli 2025

Membentuk Masa Depan Rosen: Panggilan Komunitas tentang Lima Proposal Kunci Perbendaharaan

Membentuk Masa Depan Rosen: Panggilan Komunitas tentang Lima Proposal Kunci Perbendaharaan

Pendiri bersama Rosen, Armeanio, telah mengajukan lima proposal baru ke Perbendaharaan Rosen.

Ergo Platform

9 Juli 2025

UTXO Diperluas Ergo dan Kebangkitan Kecerdasan Ekonomi Buatan

UTXO Diperluas Ergo dan Kebangkitan Kecerdasan Ekonomi Buatan

Visi Praktis untuk Agen Ekonomi Otonom Agen ekonomi otonom di blockchain Ergo melakukan pekerjaan berguna dalam ekonomi digital y.

Ergo Platform

12 Mei 2025

ErgoHACK X: Kecerdasan Buatan di Blockchain Ergo

ErgoHACK X: Kecerdasan Buatan di Blockchain Ergo

Merayakan Satu Dekade Inovasi Terdesentralisasi Bergabunglah dengan ulang tahun ke-10 ErgoHACK dan jadilah yang terdepan dalam rev.

Ergo Platform

10 April 2025