انجمن توسعه قرارداد هوشمند

Multi signature - آدرس چند امضایی

Multi-signature یا multisig
چند امضا
زمانی که به برای امضا یک تراکنش نیاز به تایید چند کلید وجود داشته باشد.
که در حالت عادی برای تایید یک تراکنش نیاز به یک امضا میباشد
مضایا

  • تقسیم وظیفه امضا بین چند نفر.
  • جلوگیری از افشا و بالا بردن امنیت در برابر افشا کلید خصوصی و…
  • ایجاد M از N امضا به منظور پشتیبان گیری که از دست رفتن یک کلید موجب از بین رفتن کل کیف پول نشود.

در حالت استاندارد شبکه بیتکوین از یک امضا برای تایید یک تراکنش استفاده میکند. ولی این شبکه راهبرد های پیچیده تری برای امضا یک تراکنش دارد که نیازمند چندین امضا برای تایید یک تراکنش دارد.

M/N
نیاز به تعداد M امضا از N اشتراک برای Sign یک تراکنش، که در این شرایط زمانی که ولت مورد نظر را کانفیگ میکنیم، (در صورت پشتیبانی کیف پول از این قابلیت ) میتوانیم تعداد N اشتراک که هر کدام یک ولت مستقل و همکار را انتخاب کنیم ، که در این تعداد M امضا را مقدار حداقل و کافی برای امضا یک تراکنش در نظر بگیریم.
به طور مثال ولتی را برای تعداد 3 همکار ( اشتراک ) ایجاد میکنیم که تعداد 2 تاییدیه ( امضا ) برای تایید تراکنش نیاز است. یعنی برای اینکه از این کیف ها بتوانیم پولی انتقال دهیم به تعداد تایید 2 نفر از 3 تا از اعضا نیاز است،
مثالی که خودم ایجاد کردم تعداد 2 اشتراک و حداقل 2 امضا میباشد 2/2 که برای تایید تراکنش نیازمند هر دو امضا میباشد.
در این حالت تراکنش در یکی از ولت ها ایجاد شده ، که مقادیر، گس فی و ادرس مقصد مشخص میگردد، که تراکنش به شکل زیر ایجاد میشود

onpc first sign => cHNidP8BAFICAAAAAUwVQJFDUrH+dLZMTqXVKdOgp8pjMb1guRwCkHJKeswbAQAAAAD9////Ac8WAAAAAAAAFgAUb3DOM2KdeRQAo4aL0b9sEFrtwmkLmAoAAAEA6gIAAAAAAQF5BRE+KAqGq1/d+KDTFAthQg0gxwpuNd4h4sd0jREgWgEAAAAA/f///wLECQAAAAAAABYAFOt8JU6bUvmVPSUmYL/zcYUxb77pcBcAAAAAAAAiACBKX+a3O2bArIs5kdNgujJUHcdigMs1nMJ+eEGkQIoRtwJHMEQCICJbXLkvdc5/xgnd93pqOiYeDbhrIzogv+Fc4sNQWTptAiAvPmDKqIYH3GubXkWN6OWUZP+pJBDX++wIjXeOe6NaEAEhA+ohuQX7S4qY8gb6c41Cy6e3Is7XDpE/6s8j5Ri8hM6iCZgKACICAw3vGIu0x8q1fkjkosoIUJS8km7Oro40tDg6se029DFORzBEAiAlK0mJ7WbTqSIkVxvEnW5E3zhFuTU/zy3+IWLwe5fgxQIgfBOZGXFZ6j2tqw4WNnCots99+p9yot0LJkV4ghX3elABAQVpUiECPMHpaObIiKbTj4KMj1FNPgvs3gqblwiRfqrg+63qrr0hAw3vGIu0x8q1fkjkosoIUJS8km7Oro40tDg6se029DFOIQNNQ7mkXX7lFZtD8ir51b9VUh0e2e9yJA82RiGI+4XEkVOuIgYCPMHpaObIiKbTj4KMj1FNPgvs3gqblwiRfqrg+63qrr0Qu0UOgQEAAIAAAAAAAAAAACIGAw3vGIu0x8q1fkjkosoIUJS8km7Oro40tDg6se029DFOED8z3nsBAACAAAAAAAAAAAAiBgNNQ7mkXX7lFZtD8ir51b9VUh0e2e9yJA82RiGI+4XEkRAEanFoAQAAgAAAAAAAAAAAAAA=

این تراکنش با یک امضا میباشد که قدرت پخش شدن در شبکه را ندارد و نیازمند امضا دیگری برای تایید میباشد ، که با انتقال این متن به کیف پول دوم میتوان این کار را انجام داد ،
که حاصل به صورت زیر میباشد

020000000001014c1540914352b1fe74b64c4ea5d529d3a0a7ca6331bd60b91c0290724a7acc1b0100000000fdffffff01cf160000000000001600146f70ce33629d791400a3868bd1bf6c105aedc269040047304402202ab94f830142ba673ce8c0059260ad4c1558262dbdc534a137b4237703695b52022014e300e07680da0d326151401ed63e238ba3780e14dbba6888bcb107766bb445014730440220252b4989ed66d3a92224571bc49d6e44df3845b9353fcf2dfe2162f07b97e0c502207c1399197159ea3dadab0e163670a8b6cf7dfa9f72a2dd0b2645788215f77a5001695221023cc1e968e6c888a6d38f828c8f514d3e0becde0a9b9708917eaae0fbadeaaebd21030def188bb4c7cab57e48e4a2ca085094bc926eceae8e34b4383ab1ed36f4314e21034d43b9a45d7ee5159b43f22af9d5bf55521d1ed9ef72240f36462188fb85c49153ae0b980a00

این تراکنش پس از امضا دوم میباشد که حالا قابل پخش (broadcast) در شبکه است، حاصل broadcast به صورت زیر میباشد:

95854f6ee8aa0e95651d3e7c5cd8dfa4b0d3ca88108aa159d82e020c35420ab5

که میتوان با استعلام این تراکنش بررسی کرد که چه وضعیتی در شبکه دارد.

عملیات ساخت تراکنش و امضا اول با هم قرار گرفته ولی عملیات امضا دوم و broadcast از هم جدا شده است . در این حالت میتوان این دو عملیات با هم ادغام شده و مستقیم به ادرس تراکنش رسید. ( جدایی این موارد فقط برای نشان دادن بوده است )