We are apologize for the inconvenience but you need to download
more modern browser in order to be able to browse our page
13 تیر 1400
  • Time Lock

    bitcoin smart contract

قفل زمانی Timelock یک قرار داد هوشمند در بیت کوین

قفل زمانی Timelock یک عملکرد نو آورانه در بیت کوین و به نوعی قرار داد هوشمند smart contract است که به شماره بلاک ویا زمانی واقعی اشاره دارد و برای قفل نمودن یک آدرس بیت کوین برای مدت زمانی در آینده بکار برده می شود. به بیان ساده تر از این امکان می توان به مانند دستور پرداخت در آینده استفاده کرد. در این شیوه پرداخت می توان از ابتدا یا در هر زمانی قبل از موعد بازپرداخت، افزایش موجودی داد.

در این مقاله بطور پیش فرض درنظر می گیریم که آشنایی لازم با شبکه بیت کوین، ساخت و استفاده از کیف پول الکتروم و ایجاد امنیت کاربری در استفاده از آن را برخوردار هستیم. توجه داشته باشید برای فهم بهتر کلیه تراکنش ها بر روی شبکه اصلی بیت کوین انجام گرفته است. همچنین برای حفظ حریم خصوصی نگارنده از کاراکتر ϴϴϴϴϴϴϴϴϴ در کلیه آدرس ها استفاده شده است.

برای ایجاد آدرس کیف پول با قابلیت قفل زمانی  از دو کیف پول Electrum و Coinb.in استفاده می کنیم. با توجه به اهمیت دریافت کیف پول از منبع معتبر، کافیست از وب سایت رسمی کیف پول آن را دانلود و در صورت دارا بودن امضای pgp آن را کنترل نمایید.

کیف پول Coinb.in به صورت html و به زبان جاوا اسکریپت نوشته شده است. کافیست پس از دانلود، اکسترکت نموده و فایل index.html را در کامپیوتر خود اجرا کنید تا به صورت آفلاین و امن از امکانات این کیف پول استفاده کنید. متاسفانه این کیف پول از سال 2017 توسط برنامه نویسان توسعه پیدا نکرده و امکان پشتیبانی TimeLockAddress در کیف پول SegWit و یا استفاده از شبکه testnet وجود ندارد و بایستی بر روی شبکه اصلی از کیف پول Legacy استفاده کنیم.

coinb.in wallet

برای ایجاد و بازپرداخت قفل زمانی نیازمند به یک آدرس اولیه بیت کوین به همراه کلید های عمومی و خصوصی آن هستیم که می توانیم از یکی از آدرس های کیف پول الکتروم استفاده کنیم. برای امنیت بیشتر بهتر است کیف پول جدیدی در الکتروم ایجاد و مبلغی را که می خواهیم قفل شود در آن آدرس واریز کنیم. توجه کنید که تنها یکی از آدرس های کیف پول HD Address استفاده می کنیم و مبلغ مورد نظر را در آن میریزیم.

address 1ϴϴϴϴϴϴϴϴϴHbiE, amount 0.0011824

همینطور که مشاهده می کنید بر روی کیف پول الکتروم موجودی به مبلغ 0.0011824 بیتکوین به آدرس اولیه 1ϴϴϴϴϴϴϴϴϴ2HbiE واریز شده است و حالا کافیست کلید عمومی و خصوصی آدرس اولیه مورد نظر را از کیف پول استخراج کنیم.

public key 0ϴϴϴϴϴϴϴϴϴ57b0ce

کلید عمومی آدرس اولیه که موجودی در آن قرار دارد: 0ϴϴϴϴϴϴϴϴϴ57b0ce

private key KϴϴϴϴϴϴϴϴϴDeJay

کلید خصوصی آدرس اولیه که موجودی در آن قرار دارد: KϴϴϴϴϴϴϴϴϴDeJay

حال به کمک coinb.in یک آدرس جدید با قفل زمانی ایجاد می کنیم، از تب new گزینه Time Locked Address را انتخاب و کلید عمومی را در باکس اول وارد و مدت زمان قفل ماندن آدرس را در باکس دوم انتخاب و بر روی submit کلیک می کنیم. همچنین می توانید بجای وارد نمودن مدت زمان، شماره بلاکی که در آینده ماین می شود را وارد نمایید.

time locked address

آدرس جدید 3ϴϴϴϴϴϴϴϴϴSRh به صورت یک آدرس از نوع p2sh خواهد بود و مبلغ موجود در آدرس اولیه بایستی به این آدرس جدید منتقل شود. همچنین Redeem Script ساخته شده 04206ϴϴϴϴϴϴϴϴϴceac برای ارسال تراکنش به همراه کلید خصوصی حساب اولیه KϴϴϴϴϴϴϴϴϴDeJay مورد استفاده قرار خواهد گرفت.

برای تایید کافیست تب Verify را انتخاب و اسکریپت ساخته شده را وارد و بر روی submit کلیک کنیم. Hodl Address همان آدرس جدید با قفل زمانی، Required Signature آدرس اولیه و Unlock Time مدت زمانی است که آدرس جدید قفل خواهد بود.

verify redeem script

مبلغ 0.0011824 بیتکوین در آدرس اولیه موجود است که پس از کسر fee تراکنش، میبایست آن را به آدرس جدید (دارای قفل زمانی 3ϴϴϴϴϴϴϴϴϴSRh ) انتقال دهیم.

send amount to time locked address

کار تمام است، بدین ترتیب مبلغ 0.00008782 در آدرس جدید با قفل زمانی قرار گرفت و تازمان سرسید آن نمی توان مبلغ را از آدرس جدید خارج نمود.

برای انجام تراکنش و خارج کردن مبلغ از آدرس جدید قفل شده از تب New گزینه Transaction را انتخاب می کنیم، در فیلد اول Redeem Script وارد و بر روی load  کلیک می کنیم، موجودی کیف پول 3ϴϴϴϴϴϴϴϴϴSRh در تب  Inputs نمایش میابد، حال می توانیم تراکنش ایجاد کنیم، در تب Outputs آدرسی که قصد داریم مبلغ به آن واریز شود را در فیلد Address وارد می کنیم به عنوان مثال bc1ϴϴϴϴϴϴϴϴϴc ، شما می توانید از هر آدرسی برای خروجی اعم از P2PKH ، P2SH ، P2WPKH ، P2WSH استفاده کنید به جز آدرس P2TR که در زمان نگارش این مقاله هنوز در شبکه به صورت عمومی قابل اجرا نبود.

create a new transaction

حجم تراکنش با توجه به یک آدرس ورودی P2PKH و یک آدرس خروجی چیزی حدود 190 تا 201 bytes با توجه به نوع آدرس خروجی خواهد بود که با ضرب در جدول whatthefee.io میتوان بهترین fee برای این تراکنش را محاسبه کرد.

whatthefee.io

کافیست مبلغ fee را از موجودی 0.00008782 کم و در فیلد Amount وارد کنید. بر روی دکمه Submit کلید تا کد transaction یا tx شما ساخته شود.

حال بایستی تراکنش را به کمک کلید خصوصی آدرس اولیه KϴϴϴϴϴϴϴϴϴDeJay که موجودی در آن قرار داشت امضا کنیم. برای این منظور Sign را از منوی اصلی انتخاب می کنیم، در فیلد اول Private key برای امضای تراکنش و در فیلد دوم کد transaction که در مرحله پیش ساخته شد را وارد و در انتها بر روی Submit کلیک می کنیم، tx امضاء شده حاضر برای ارسال بر روی شبکه است.

sign transaction

برای ارسال تراکنش بر روی شبکه و انجام نهایی آن از منوی اصلی Broadcast را انتخاب، کد تراکنش امضاء شده مرحله قبل را در فیلد آن وارد و بر روی Submit کلیک می کنیم.
اگر مدت زمان لازم که ادرس در حالت قفل قرار دارد نگذشته باشد با پیغام خطای non-final مطابق زیر روبرو خواهید شد.

broadcast transaction

تنها در صورتی امکان ارسال تراکنش بر روی شبکه را خواهید داشت که مدت زمانی که برای قفل بودن آدرس در نظر گرفته اید سپری شده باشد.

broadcast transaction

پس از ارسال تراکنش در شبکه می توانید TXID را مشاهده و در اکسپلورر بیتکوین آن بررسی کنید.

bitcoin block explorer


References

https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki
https://en.bitcoin.it/wiki/Timelock
https://bitcoindev.network/guides/bitcoinjs-lib/timelock-transactions
https://github.com/OutCast3k/coinbin
https://github.com/spesmilo/electrum

تمام (;

درصورت هرگونه سوالی با من در توئیتر درارتباط باشید.

علی
me [at] ali2k [dot] com

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Top
LOADING CONTENT