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şimlerine en iyi örneklerden 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'ın birçok avantajı vardır: geniş erişim, verimlilik ve pazarlama yönleri en ikna edici olanlardır... Ama şimdi, gerçekten önemli olan konulara 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 (bununla ilgili beyaz kağıt sayfa 6). 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, post-EIP1 crowdfunding script geliştirmesini finanse etmek için ilk kampanya önerisini de inceleyeceksiniz.
Tüm detaylara girmek isterseniz, lütfen aşağıdaki “Script” bölümünü okuyun. Aksi takdirde, “Bağış Nasıl Yapılır”, “Bağışları Nasıl Toplanır” 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 ikincisi 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 gömülmesini desteklemediğinden (yalnızca HEIGHT gibi önceden tanımlanmış olanlar), script'i beyaz kağıttaki değişkenleri somut değerlerle değiştirmek suretiyle derlemenin tek yolu budur. Ö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 modifiye edilmiş script şu şekilde olur:
{
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ğış Nasıl Yapılır
Ö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 şekilde 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 şu şekilde 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 üzerinde kutuyu otomatik olarak bulacaktır. Cüzdan, daha sonra kutunun harcanabilir olup olmadığını kontrol etmek için, kutuyu bir girdi olarak ve sadece bir çıkış (aynı adrese) ile en basit işlemi oluşturarak 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ğışları Nasıl Toplanır
Proje genel anahtarı ile ilişkili cüzdan, blockchain üzerinde gelen kutuları bulacaktır. Ancak, cüzdan şu anda bunun için en basit işlemi kullandığından, kutuların harcanabilir olduğunu garanti edemeyecektir ve script, böyle bir harcama işlemi için başarısız olacaktır.
/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 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ündeki aşağıdaki anahtarı kullanın:
9gBSqNT9LH9WjvWbyqEvFirMbYp4nfGHnoWdceKGu45AKiya3Fq
Herhangi bir miktarda para bağışlamak için, lütfen yukarıdaki “Bağış Nasıl Yapılır” bölümünü izleyin, backerPubKey'i kendi genel anahtarınızla 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, öneriniz 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






