Ergo ve crowdfunding
6 Eylül 2019

Crowdfunding Nedir?
Crowdfunding, bireylerin kolektif çabalarıyla sermaye toplama yöntemidir. Kampanyalar genellikle dünya çapında web üzerinden başlatılır ve projelerin ve işletmelerin büyük bir insan grubundan küçük miktarlarda para toplayarak finanse edilmesine olanak tanır.
Başarılı crowdfunding girişimlerinin en iyi bilinen örneklerinden biri, sanal gerçeklik başlığı olan Oculus Rift'tir. Oculus VR, 2012'de kampanyasını başlattı ve sadece iki yıl sonra Facebook tarafından toplam 2 milyar dolara satın alındı. Alışılmış girişimlerin yanı sıra, Ethereum, Tron ve EOS gibi birçok blockchain projesi de crowdfunding yolunu seçti. Bugün, kampanyanızı yayınlamanıza olanak tanıyan sayısız platform mevcuttur. Bunlardan bazıları Indiegogo, Kickstarter ve Gofundme'dir.
Crowdfunding'in birçok avantajı vardır: geniş erişim, verimlilik ve pazarlama yönleri en ikna edici olanlardır... Ama şimdi, gerçekten önemli olan şeye geçelim!
Ergo'da Crowdfunding Tanıtımı
Birkaç gün önce, 28 Ağustos'ta, çekirdek geliştirici Kushti, (Ergo forumunda)[www.ergoforum.org] kullanıcıların Ergo blockchain üzerinde bir crowdfunding kampanyası başlatmalarına olanak tanıyan kodu başarıyla yazıp uyguladığını belirtti (bunun beyaz kağıt sayfa 6'da belirtildiği gibi). Bu kod, mevcut cüzdan API'si ile de çalışmaktadır. Burada cüzdanı nasıl kuracağınızla ilgili hızlı bir kılavuz bulunmaktadır.
Bu makalede, tam olarak bunu nasıl yapacağınızı öğreneceksiniz: Ergo üzerinde crowdfunding! Ayrıca, ilk kampanyanın önerisini de ele alıyor, bu da post-EIP1 crowdfunding script geliştirilmesini finanse etmektir.
Tüm detaylara girmek isterseniz, lütfen aşağıdaki “Script” bölümünü okuyun. Aksi takdirde, “Bağış Yapma”, “Bağış Toplama” ve “Crowdfunding Proje Önerisi” bölümlerini okumaya geçebilirsiniz.
Script
ErgoScript Beyaz Kağıdı (sayfa 6)'na göre en basit crowdfunding script'i, “aşağıdaki crowdfunding durumu için bir script: bir proje destekçisi (backerPubKey anahtarı ile) bir projeye (projectPubKey anahtarı ile) para vermek ister, ancak yalnızca proje diğer kaynaklardan bir son tarihe kadar yeterli para toplarsa (en az minToRaise).
Projeye para vermek için, destekçi aşağıdaki script ile korunan bir çıkış kutusu oluşturacaktır. Script, iki koşul içerir: birincisi son tarihin geçtiği durum için (destekçinin parayı geri almasını sağlayan) ve diğeri başarılı olduğu durum için (projenin, son tarihten önce en az minToRaise miktarını toplaması durumunda parayı harcamasını sağlayan).
Yeterli paranın toplanmasını sağlamak için, script, projectPubKey'e giden yeterli değere sahip bir kutu arayacaktır. Çıkış kutusunun değerinin nereye gittiğini kontrol etmek için, script çıkış kutusunu koruyan script'i okuyacak ve bunu proveDlog(projectPubKey) ile karşılaştıracaktır; bu script, projectPubKey.propBytes ile elde edilebilir.
Şu anda API, özel ortam değişkenlerinin (yalnızca önceden tanımlanmış olanlar gibi HEIGHT) gömülmesini desteklemediğinden, script'i beyaz kağıttan somut değerlerle değiştirmek dışında başka bir yol yoktur. Örneğin, bir crowdfunding kampanyasının başarılı olduğunu varsayalım, eğer 50,000 blok numarasından önce 500 Erg topluyorsa. backerPubKey ve projectPubKey için şu anda yalnızca P2PK serileştirilmiş anahtarları kabul eden PK() fonksiyonunu kullanabiliriz. O zaman Beyaz Kağıttan değiştirilmiş script şu şekilde olacaktır:
{
val backerPubKey = PK("9h7DHKSDgE4uvP8313GVGdsEg3AvdAWSSTG7XZsLwBfeth4aePG")
val projectPubKey = PK("9gBSqNT9LH9WjvWbyqEvFirMbYp4nfGHnoWdceKGu45AKiya3Fq")
val deadline = 50000
val minToRaise = 500L * 1000000000
val fundraisingFailure = HEIGHT >= deadline && backerPubKey
val enoughRaised = {(outBox: Box) =>outBox.value >= minToRaise
&& outBox.propositionBytes == projectPubKey.propBytes
}
val fundraisingSuccess = HEIGHT < deadline && projectPubKey && OUTPUTS.exists(enoughRaised)
fundraisingFailure || fundraisingSuccess
}
Bağış Yapma
Öncelikle, JSON çok satırlı dizeleri desteklemediğinden, satır sonlarını \n ile değiştirmeniz gerekir.
Ayrıca, tırnak işaretleri kaçırılmalıdır, bu nedenle " yerine " kullanın. Ortaya çıkan JSON, /script/p2sAddress'e gönderilecektir.
Bir projeye bağış yapmak için, önce /wallet/addresses'den adresinizi alın, örneğin, bunlardan birincisini alın. Adresi backerPubKey'e koyun, böylece /script/p2sAddress'e yapılacak bir istek şu adımda şöyle görünecektir:
{
"source": "{
val backerPubKey = PK(\"9...\")
val projectPubKey = PK(\"9gBSqNT9LH9WjvWbyqEvFirMbYp4nfGHnoWdceKGu45AKiya3Fq\")
val deadline = 50000
val minToRaise = 500L * 1000000000
val fundraisingFailure = HEIGHT >= deadline && backerPubKey
val enoughRaised = {
(outBox: Box) =>
outBox.value >= minToRaise && outBox.propositionBytes == projectPubKey.propBytes
}
val fundraisingSuccess = HEIGHT < deadline && projectPubKey && OUTPUTS.exists(enoughRaised)
fundraisingFailure || fundraisingSuccess
}"
}
“9…” yerine kendi adresinizi koyun.
Diziyi /script/p2sAddress'e gönderin ve şu şekilde bir yanıt alın:
{
"address": "GB3kh2izpWKvyZfMboQwsEscjPaZcz9WrzGqZB4ZrkzRreiFMV6HZYWXGMK3rqCjDCoPgWGNzfnYSUhivW4a1VRYPE7uZXwKnBcqWcRkiuTx6QW55EcPcWeELUsumwdtKoFtWY583nWnKZff"
}
Adres dizesini (örneğin GB3…) kopyalayın ve /wallet/payment/send aracılığıyla bu adrese para gönderin. 10 Erg (10 Milyar nanoErg) göndermek için API yöntemine yapılacak bir istek şöyle olacaktır:
[
{
"address": "GB3kh2izpWKvyZfMboQwsEscjPaZcz9WrzGqZB4ZrkzRreiFMV6HZYWXGMK3rqCjDCoPgWGNzfnYSUhivW4a1VRYPE7uZXwKnBcqWcRkiuTx6QW55EcPcWeELUsumwdtKoFtWY583nWnKZff",
"value": 10000000000
}
]
Hepsi bu kadar!
Artık cüzdan, geri ödeme koşulunda cüzdana ait olan genel anahtarı içerdiğinden, blockchain'de kutuyu otomatik olarak bulacaktır. Cüzdan daha sonra, kutuyu bir girdi olarak ve sadece bir çıkış (aynı adrese) ile en basit işlemi oluşturarak kutunun harcanabilir olup olmadığını periyodik olarak kontrol eder. Geri ödeme yüksekliği (örneğin 50,000) geçtikten sonra cüzdan kutuyu harcayabilecektir ve böylece kutu değeri /wallet/balances'a eklenecektir.
Lütfen bunun EIP-1 3 uygulamasından sonra böyle olmayacağını unutmayın, çünkü cüzdan o zamana kadar dar tanıma kalıpları kullanacaktır.
Bağış Toplama
Proje genel anahtarı ile ilişkili cüzdan, blockchain'de gelen kutuları bulacaktır. Ancak, cüzdan şu anda bunun için en basit bir işlem kullandığından ve script böyle bir harcama işlemi için başarısız olduğundan, kutuların harcanabilir olduğunu garanti edemeyecektir.
/wallet/boxes/uncertain yöntemi uygulanmadan önce, bir projenin gelen kutuları bulmasının tek yolu budur. Daha sonra /wallet/transaction/send ile manuel olarak sağlanan ("inputsRaw" içinde) serileştirilmiş kutularla (serileştirilmiş kutuyu tanımlayıcısı ile almak için /utxo/byIdBinary kullanın) işlem yapılmalıdır.
Kushti bunu kendisi yaptı ve aşağıdaki işlemi elde etti.
Lütfen EIP-1'in bu iş akışını da bozacağını unutmayın.
Kushti, EIP-1 uygulamasından sonra crowdfunding kampanyalarına katılmak ve düzenlemek için komut satırı script'leri geliştirmek üzere 50,000 blok öncesinde 500 Erg toplamayı öneriyor. Komut satırı script'leri, manuel olarak istek yapmaktan daha uygundur ve bunların üzerine grafik arayüzler inşa etmek için de kullanılabilir.
Hazine, fonların yarısını sağladı, bu nedenle diğerlerinin eksik 250 Erg'i topluca katkıda bulunması gerekiyor. Bir kampanya başarısız olursa, geri ödemeler otomatik olarak verilecektir. Taahhüt toplamak şu anda kolay olmadığından, Kushti projeyi yönetecektir, bu nedenle lütfen onun kontrolünde olan aşağıdaki anahtarı kullanın:
9gBSqNT9LH9WjvWbyqEvFirMbYp4nfGHnoWdceKGu45AKiya3Fq
Herhangi bir miktarda para bağışlamak için, lütfen yukarıdaki “Bağış Yapma” bölümünü izleyin, backerPubKey'i kendi genel anahtarınızla değiştirin ve taahhüt miktarını uygun bir değerle değiştirin (lütfen bunun nanoErg cinsinden olduğunu unutmayın, 1 Erg = 1.000.000.000 nanoErg).
Her zamanki gibi, daha fazla sorunuz, önerileriniz varsa veya harekete katılmak istiyorsanız, lütfen sosyal medya kanallarımıza veya forumumuza katılın.
Share post
13 Ağustos 2025
9 Temmuz 2025
12 Mayıs 2025






