💻 Alpaca Finance ادغام با
ادغام با Alpaca Finance
آلپاکا فاینس(Alpaca Finance) به برنامه های DeFi و کاربران نهایی اجازه می دهد تا با پروتکل اصلی خود ادغام شوند. به عنوان یک مثال ساده، یک توسعه دهنده می تواند یک پروتکل ترکیب خودکار(auto-compounding) بسازد که دارایی های کاربران را به خزانه رمزنگاری شده(vault) سپرده گذاری Alpaca Finance واریز کرده و سودهایی را برای کاربران برای بهره وری و تسهیلات gas ترکیب(compound) کند. هدف از این اسناد کمک به توسعه دهندگانی می باشد که می خواهند با پروتکل ما ادغام شوند تا بدین ترتیب از امنیت کلی اکوسیستم ما، اطمینال حاصل کنند.
ادغام با Alpaca API احتیاج به احراز هویت دارد، بنابراین اگر می خواهید از این سرویس استفاده کنید، لطفاً با ایمیل ما به نشانی requests@alpacafinance.org تماس بگیرید.
ادغام قرار داد هوشمند
این بخش نحوه ادغام مستقیم با Alpaca Finance از طریق یک قرارداد هوشمند را توضیح می دهد.
سپرده گذاری
آلپاکا فاینس(Alpaca Finance) به کاربران امکان می دهد با واریز دارایی های کریپتو خود به خزانه رمزنگاری شده(vault) سپرده گذاری ما، سود کسب کنند. سپس این دارایی ها به فارمر ها ارائه می شود تا پوزیشن خود را افزایش دهند. هر قرارداد هوشمندی که با EVM سازگار باشد و در BNB Chain مستقر شود می تواند با پروتکل وام Alpaca Finance ادغام شود.
برای واریز توکن پایه به خزانه رمزنگاری شده(vault) Alpaca Finance، ابتدا باید لیست خزانه رمزنگاری شده های(vault) موجود و توکن های پایه مربوط به آنها را بدست آورید.
#لطفاً برای مشاهده لیست کامل همه آدرسهای قرارداد خزانه رمزنگاری شده(vault) وارد این لینک شوید.
قبل از واریز وجه به خزانه رمزنگاری شده(vault)، قرارداد هوشمندی که به عنوان سپرده گذار عمل می کند، باید ابتدا حد مجاز خرج کردن توکن اولیه را که واریز شده است، تأیید کند. این به قرارداد هوشمند آلپاکا این امکان را می دهد تا از فرستنده توکن دریافت کند.
قطعه کد جاوا اسکریپت بالا یک گردش کار(workflow) ساده در مورد نحوه تأیید حد مجاز خرج کردن توکن با حداکثر مقدار ممکن است. لطفاً توجه داشته باشید که استفاده از MaxUint256
می تواند خطرات امنیتی را ایجاد کند، استفاده از مقدار توکن دقیق توسط کاربر توصیه می شود.
انجام یک واریز با فراخوانی روش deposit
و تعیین مبلغ واریز در پارامتر amountToken
انجام می شود. نوع دادهuint256
،amountToken
می باشد و این پارامتر باید به اعشار توکن واریز، فرمت بندی شود (به عنوان مثال ، BNB از 18 عدد اعشار استفاده می کند ، یک BNB= 10000000000000000000
یا 1 * 1e18
). برای مواردی که توکن واریز BNB است، خزانه رمزنگاری شده(vault) wrapping کردن BNB به wBNB را انجام می دهد، اما معامله باید شامل مقدار کافی از BNB ارسال شده به عنوان رمز اصلی باشد.
در صورت موفقیت آمیز بودن واریز، خزانه رمزنگاری شده(vault) توکن های interest-bearing (ibTokens) ضرب کرده(ضرب سکه) و آن توکن های ضرب شده را به تماس گیرنده باز می گرداند. لطفاً توجه داشته باشید که مبلغ توکن بازگشتی با توجه به طراحی توکن های interest-bearing، معادل مبلغ توکن پایه ارائه شده نخواهد بود. تماس گیرنده روش deposit
باید سهام کاربران را برای واریز در vault ها به درستی پیگیری کند، لطفاً برای توضیحات بیشتر به بخش محاسبه Interest Bearing مراجعه کنید.
سود سپرده گذاری به ibTokenها تعلق می گیرد. برای درک منافع حاصل از سپرده گذاری، ibTokens باید کنار گذاشته شود و توکن پایه + سود جمع آوری شده را پس بگیرید. متوجه خواهید شد که قیمت مبادله ibToken در هنگام برداشت بیشتر خواهد بود، که نشان می دهد سود قبلاً جمع شده است. بنابراین، پس از برداشت ، توکن های پایه اضافه تری را دریافت خواهید کرد.
برای بازخرید توکن های پایه از vault، مقدار ibTokenهایی که باید برداشته شوند، باید به روش withdraw
در قرارداد Vault
عرضه گردند.
سپس توکن های اولیه به تماس گیرنده بازگردانده می شود. اگر توکن برگشتی BNB باشد ، قرارداد خزانه رمزنگاری شده(vault) WBNB را به BNB تبدیل می کند(unwrap می کند).
محاسبه توکن Interest Bearing
توکن Interest Bearing (ibToken) توکنی است که نشان دهنده سهم خزانه رمزنگاری شده(vault) واریز کننده می باشد. ibTokenها سود سپرده گذاری را در طول زمان افزایش می دهند. هر پروتکل DeFi که مایل به استفاده از vault های Alpaca Financeاست باید محاسبه ibToken ها را به درستی درک و اجرا کند تا سهم واقعی کاربران از vault را منعکس کند.
بنابراین، نسبت بین یک ibToken و توکن پایه اصلی فقط زمانی که vault برای اولین بار باز می شود 1 به 1 خواهد بود و پس از آن ارزش ibToken در کنار افزایش سود وام افزایش می یابد (ارزش ibToken نسبت به توکن پایه فقط یک طرفه به سمت بالا حرکت می کند. ارزش آن نمی تواند کاهش یابد). برای مثال، بیایید قیمت را فرض کنیم: 1ibBNB = 1.0292 BNB
که به این معنی می باشد که اگر 1.0292 BNB واریز کنید، در عوض 1 ibBNB دریافت می کنید. از سوی دیگر، در صورت بازخرید 1 ibBNB در عوض 1.0292 BNB دریافت می کنید. BNB اضافی از بازخرید ibBNB ناشی از سود تعهدی است.
درک این مکانیک فاندامنتال ارزش ibToken ها بسیار مهم می باشد، زیرا یک پروتکل DeFi که با خزانه رمزنگاری شده(vault) سپرده گذاری Alpaca Finance ادغام شده است ممکن است نیاز به محاسبه دقیق سهام کاربران از سپرده vault داشته باشد. عدم انجام این کار می تواند خطرات امنیتی و زیان مالی را تحمیل کند. این مورد در خصوص حملات به bEarn.fi و ValueDeFi صادق بود که در آن این پروتکل ها همیشه ibTokens را دارای نسبت 1 به 1 با توکن پایه می دانستند (آنالیز حملات به bEarn.fi و ValueDefi را بخوانید).
علاوه بر این، اگرچه آلپاکا با وام های فوری(flash loans) کار نمی کند، اما در یک vault خارجی غیر از آلپاکا، ممکن است خطر دستکاری قیمت ibToken در حمله ای مانند حمله وام سریع(flash loan) وجود داشته باشد. در صورت عدم آمادگی، قیمت ibToken در محدوده معامله مهاجم به شدت تغییر می کند. به همین دلیل، تکیه بر قیمت ibToken از محاسبه قرارداد هوشمند به تنهایی کافی نیست. ما به این پروژه پیشنهاد می کنیم که از یک Oracle قیمتی استفاده کند که نسبت فعلی ibToken ها را در برابر توکن پایه آن تغذیه(feeding) می کند تا از چنین حمله ای که در بالا ذکر شد جلوگیری شود.
بنابراین، ما ایمن ترین و صحیح ترین روش برای محاسبه قیمت ibTokens را به شما نشان می دهیم.
محاسبه مستقیم از قرارداد هوشمند
محاسبه قیمت توکن ibToken از قرارداد هوشمند ساده ترین راه است، اما برای مقاوم بودن، این نباید تنها روشی باشد که به آن اعتماد دارید.
قطعه کد بالا محاسبه قیمت ibToken از دوباره بدست آوردن ارزش totalToken
و totalSupply
از vault مربوطه را نشان می دهد.
دوباره بدست آوردن قیمت ibToken از Alpaca API
آلپاکا فاینس(Alpaca Finance) یک API قیمتهای فعلی ibToken را با ارسال درخواستREST GET
به نقطه پایانی /ibTokens
برای دوباره بدست آوردن قیمت هر نوع ibToken ارائه کرده است. ادغام با Alpaca API احتیاج به احراز هویت دارد، بنابراین اگر می خواهید از این سرویس استفاده کنید، لطفاً با ما با نشانی ایمیل request@alpacafinance.org تماس بگیرید.
نتیجه نمونه از API به شرح زیر است :
قیمتی که دوباره از API آلپاکا بدست آمده است باید با استفاده از یک oracle قیمتی به قرارداد هوشمند عرضه شود. ارائه قیمت ها از طریق یک ورودی به یک قرارداد هوشمند باعث آسیب پذیر شدن نسبت به حملات تزریق شده از جانب مراجعه کننده ها می گردد. ما اکیداً مخالف انجام این کار هستیم. نمونه ای از یک oracle ساده قیمتی را می توانید در این لینک مشاهده کنید. با استفاده از یک oracle قیمتی مطمئن، می توانید از صحت و قابلیت اطمینان داده های قیمت ibToken اطمینان حاصل کنید.
ما اکیداً پیشنهاد می کنیم که قیمت ibToken را هم از محاسبه قرارداد هوشمند و هم از API Alpaca دوباره بدست آورید. این دو منبع داده قیمت باید برای جلوگیری از هرگونه ناهنجاری احتمالی داده مقایسه شوند. اگر مقایسه بین دو منبع به طور قابل توجهی متفاوت باشد، داده های قیمت باید رد شود.
به طور خلاصه، مطمئن ترین فرایند محاسبه قیمت ibToken به شرح زیر است :
1- قیمت های ibToken را در قراردادهای خود محاسبه کنید.
2- از یک oracle خارج زنجیره ای (off-chain) برای قیمتهای ibToken استفاده کنید یا این قیمتها را از API آلپاکا دریافت کنید.
3- 1 و 2 را مقایسه کنید اگر تفاوت بیش از n درصد باشد، معامله را برگردانید.
این API آلپاکا در حال حاضر فقط برای پروتکل ها و موسسات لیست سفید(whitelist) می باشد. برای درخواست دسترسی، لطفاً به آدرس ایمیل requests@alpacafinance.org ایمیل بزنید.
استیک کردن(Staking)
آلپاکا فاینس(Alpaca Finance) فرصتهای استیک کردن را در اختیار کاربران قرار می دهد. توکن های Interest-bearing و توکن های LP منتخب برای استیک کردن در استخر های استیکینگ ما جهت دریافت سود بیشتر در قالب توکن های ALPACA در دسترس می باشند. اگر دارایی را واریز کرده اید و ibToken ها را دریافت کرده اید، به شما توصیه می کنیم که آن توکن ها را در این استخر ها استیک کنید تا حداکثر پاداش های موجود را بدست آورید.
برای استیک کردن توکن ها در استخرهای استیکینگ Alpaca Finance ، ابتدا باید لیست استخر ها و توکن های مربوط به آنها را تهیه کنید. لطفاً برای مشاهده فهرست کامل همه آدرسهای قرارداد استخر وارد این لینک شوید. قرارداد استخرها به طور کلی در پایگاه کد (codebase) ما Fairlaunch
نامیده می شوند.
انجام استیکینگ با فراخوانی روش deposit
انجام می شود. پارامترها به شرح زیر است :
یک- _for
برای آدرس واریز کننده می باشد.
دو- _pid
آیدی استخر استیکینگ می باشد.
سه- _amount
مقدار توکنی است که باید در uint256
واریز شود و در اعشار آن بیان شده است (برای مثال ، ibBNB از 18 عدد اعشار استفاده می کند ، یک ibBNB برابر با 10000000000000000000
یا 1 * 1e18
می باشد)
اطلاعات سهم استیکینگ در شرایط قرارداد هوشمند ذخیره می شود. هیچ توکنی از استیکینگ صادر نمی شود. سهم یک کاربر را می توان با فراخوانی روش userInfo
از قرارداد Fairlaunch
دوباره بدست آورد.
پاداش استیکینگ به طور خودکار واریز نمی شود و باید به صورت دستی برداشت شود. با این حال، انجام واریز یا برداشت وجه در استخرهای استیک شده، به طور خودکار هرگونه پاداش معلق را برای تماس گیرنده به همراه خواهد داشت. تماس گیرنده برای برداشت پاداش از یک استخر استیکینگ باید با استفاده از روش harvest
از قرارداد Fairlaunch
تماس گیرد و آیدی استخر را ارائه دهد.
برای برداشتن توکن های استیکینگ از استخر، مقدار سهم کاربر باید به روش withdraw
در قرارداد Fairlaunch
ارائه شود.
توکن های استیکینگ به تماس گیرنده بازگردانده می شود و هرگونه پاداش معلق نیز بطور خودکار برداشت می شود.
محیط Testnet
قبل از مرحله بندی و گسترش تولید در Mainnet، قراردادهای Alpaca Finance ابتدا باید درTestnet شبکه خوشمند بایننس مستقر شوند. این قراردادهای Testnet در درجه اول فقط برای تست داخلی توسعه Alpaca Finance طراحی شده اند.
با این حال، ما برای اشخاص ثالثی که مایل به آزمایش ادغام آنها با قراردادهای ما هستند، آماده هستیم. توکن های مورد استفاده در قراردادهای Testnet داخلی توسط ما ایجاد شده است. اگر می خواهید برخی از این توکن ها را برای اهداف آزمایشی داشته باشید، لطفاً با ایمیلrequests@alpacafinance.org تماس بگیرید. برای مشاهده لیست آدرس های موجود در Testnet، لطفاً وارد این لینک شوید.
Last updated