شعار زيفيرنت

كيفية إنشاء حساب Multisig

التاريخ:

صورة

صورة الملف الشخصي RSK هاكر نون

@RSK سمارتRSK

منصة عقد ذكية أعلى البيتكوين

ماذا يعني multisig؟

يشير مصطلح "multisig" إلى "متعدد التوقيع" ويستخدم لوصف الحسابات المرتبطة بأكثر من مفتاح خاص واحد. تم إنشاء الحساب بقائمة المالكين وسياسة "m-out-of-n" ؛ عندما تتم الموافقة على المعاملات من قبل مالكيها على الأقل ، يمكن تنفيذها.

في blockchain ، تتضمن كل معاملة استخدام توقيع المفتاح العام ؛ يمتلك كل مشارك في blockchain زوج مفاتيح خاص / عام. يستخدم المشاركون المفاتيح الخاصة لتوقيع معاملة ويمكن لجميع المشاركين الآخرين التحقق من هذا التوقيع باستخدام المفتاح العام للموقّع.

باستخدام حساب multisig ، تتطلب كل معاملة توقيع العديد من الحسابات قبل تنفيذها. يمكن لأحد المشاركين (الذي هو من بين مالكي حسابات multisig) بدء المعاملة ، ولكن فقط عندما يوافق الملاك الآخرون على هذه المعاملة ، سيتم تنفيذها.

لماذا؟

يزيل حساب multisig نقطة الفشل الفردية في حالة الهجمات ويسمح بتنفيذ مجموعة متنوعة من حالات الاستخدام التي يشارك فيها طرف واحد أو أكثر. فيما يلي بعض الأمثلة.

وفرة: إذا فقد المستخدم المفتاح ، فلن تضيع الأموال لأنه لا يزال من الممكن استخدام المفاتيح الأخرى.

2FA (مصادقة ثنائية): يمكن لمستخدم واحد أن يمتلك كل من محفظة الويب ومحفظة الهاتف المحمول المرتبطة بحساب multisig ، السياسة 2 من 2.

موافقة الإدارات: يجب أن يوافق قسمان على كل معاملة قبل نشرها ، السياسة 2 من 2.

حساب توفير الوالدين: يمكن للطفل أن ينفق المال فقط بموافقة أي من الوالدين.

ما نحن بصدد القيام به

  1. إنشاء حساب multisig
  2. تحويل الأموال إلى حساب multisig
  3. إنشاء معاملات multisig
  4. اعتماد معاملات multisig
  5. تنفيذ المعاملات المتعددة
  6. رفض معاملات multisig
  7. تحديث حساب multisig (المالكين والعتبة)

على مستودع يمكنك العثور على مثال مع بعض الميزات المذكورة أعلاه ، يمكنك استنساخه وتشغيله محليًا.

  1. استنساخ مستودع التطبيق عينة العقدة: `جيت استنساخ [البريد الإلكتروني محمي]: rsksmart / rif-multisig-node-sample.git`
  2. تثبيت التبعيات: `تثبيت npm`
  3. ابدأ شبكة ganache: `npm run network: local`
  4. "npm run start" لتنفيذ البرنامج النصي الرئيسي

هندسة حل RSK

المكتبات:

العقود الذكية:

بقية API:

  • خدمة المعاملات الآمنة: يقوم بجمع كافة المعلومات باستخدام multisig
    trace_transaction

    و

    trace_blocks

    . علاوة على ذلك ، فإنه يسمح بجمع التوقيعات خارج السلسلة واستعادة المعاملات المعلقة المتعددة.

مستودع:

لنبدأ

إنشاء حساب multisig

بدء الموقّع:

```typescript=
const provider = new providers.JsonRpcProvider()
const signer = await provider.getSigner(0)
```

قبل إنشاء حساب multisig ، يتطلب الأمر نشر العقود على الشبكة. باستخدام إحدى شبكات RSK (mainnet أو testnet) ، يمكنك استخدام عناوين العقود التي تم نشرها مسبقًا.

```typescript=
import { EthersSafeFactory } from '@rsksmart/safe-factory-sdk'
​
const safeFactory = new EthersSafeFactory( signer, proxyFactoryAddress, safeSingletonAddress
)
​
const safeSdk = await safeFactory.createSafe({ owners: [signer.getAddress()], threshold: 1
})
```

تحويل الأموال إلى حساب multisig

من المهم أن نفهم أنه لتلقي الأموال ، يتعين علينا استخدام عنوان حساب multisig (بدلاً من عنوان المالك) كمستلم.

```typescript=
// previously created safe
const safeSdk: Safe;
​
// address to use as fund receiver
const multisigAccountAddress = safeSdk.getAddress()
```

إنشاء معاملات multisig

هناك عدة طرق لإنشاء معاملات متعددة التوقيع وفقًا لاحتياجاتنا.

إذا احتجنا إلى إنشاء معاملات أولية ، فيمكننا استخدام طريقة createTransaction في المثيل الآمن:

```typescript=
const partialTx: SafeTransactionDataPartial = { to: '0x<address>', data: '0x<data>', value: '<eth_value_in_wei>'
}
const safeTransaction = await safeSdk.createTransaction(partialTx)
```

أو يمكننا استخدام

RawTransactionBuilder

:

```typescript=
import { RawTransactionBuilder } from '@rsksmart/safe-transactions-sdk'
​
const rawTransactionBuilder = new RawTransactionBuilder(safe)
const safeTransaction = await rawTransactionBuilder.rawTransaction(to, value, data)
```

معاملات ERC20

وبالمثل ، يمكننا أن نخلق ERC20- المعاملات ذات الصلة ، بما في ذلك RIF رمز.

```typescript=
import { ERC20TransactionBuilder } from '@rsksmart/safe-transactions-sdk'
​
const erc20TransactionBuilder = ERC20TransactionBuilder.create(safe, ERC20Token)
​
// create a `transfer` transaction
const transferTx = await erc20TransactionBuilder.transfer( to, transfer
)
​
// create a `transferFrom` transaction
const transferFromTx = await erc20TransactionBuilder.transferFrom( from, to, value
)
``` 

معاملات ERC721

توفر الحزمة @ rsksmart / safe-transaction-sdk أيضًا طريقة سهلة لإنشاء معاملات ERC721.

```typescript=
import { ERC721TransactionBuilder } from "@rsksmart/safe-transactions-sdk";
​
const erc721TransactionBuilder = ERC721TransactionBuilder.create( safe, ERC721Token
);
​
// create a `transferFrom` transaction
const transferFromTx = await erc721TransactionBuilder.transferFrom( from, to, tokenId
);
​
// create a `safeTransferFrom` transaction
const safeTransferFromTx = await erc721TransactionBuilder.safeTransferFrom( from, to, tokenId
);
​
```

اعتماد معاملات multisig

يمكن أن تتم الموافقة على المعاملة سواء داخل السلسلة أو خارج السلسلة. مع الموافقة على السلسلة ، تتم إضافة التوقيع بالتفاعل مع الحساب الآمن ، وبالتالي يكون التوقيع متاحًا في blockchain. تتطلب الموافقة خارج السلسلة من المستخدم نشر التوقيع من خلال خدمة المعاملات الآمنة لإتاحته للمشاركين الآخرين.

الموافقة على السلسلة

```typescript=
const txHash = await safeSdk.getTransactionHash(safeTransaction)
const approveTxResponse = await safeSdk.approveTransactionHash(txHash)
await approveTxResponse.wait()
​
```

بمجرد الموافقة على المعاملة على السلسلة ، يمكن للمستخدم استرداد قائمة المالكين باستخدام

getOwnersWhoApprovedTx

الأسلوب.

```typescript=
const ownersWhoApproved = await safeSdk.getOwnersWhoApprovedTx(txHash)
​
```

الموافقة خارج السلسلة

يحتاج المستخدم إلى إنشاء التوقيع أولاً.

```typescript=
const signature = await safeSdk.signTransaction(safeTransaction)
```

بمجرد إنشاء التوقيع ، يجب على المستخدم نشر التوقيع باستخدام خدمة المعاملات الآمنة.

```typescript=
const safeService = new SafeServiceClient(SAFE_TRANSACTION_SERVICE_URL)
​
const safeTxHash = await safeCoreSdk.getTransactionHash(transaction)
await safeServiceClient.confirmTransaction(safeTxHash, signature.data)
```

تنفيذ المعاملات المتعددة

بمجرد الموافقة على المعاملة من قبل عدد من المالكين الذين يجب أن يكونوا مساويين أو أكبر من الحد المعين ، يمكن تنفيذها.

```typescript=
const txResponse = await safeSDk.executeTransaction(safeTransaction)
await txResponse.wait()
```

رفض معاملات multisig

يعني رفض المعاملة إنشاء وتنفيذ معاملة جديدة بنفس القيمة التي نرغب في رفضها. بمجرد إنشاء معاملة الرفض ، يجب الموافقة عليها وتنفيذها مثل أي معاملة متعددة التوقيع أخرى.

على سبيل المثال ، إذا تم ضبط الحد الحالي على 2 ، فإن رفض المعاملة يتطلب الخطوات التالية:

  1. إنشاء معاملة رفض
  2. موافقة 2 مالك على الأقل على معاملة الرفض
  3. تنفيذ معاملة الرفض.
```typescript=
import { rejectTx } from '@rsksmart/safe-transactions-sdk'
​
// creation of the rejection transaction
const rejectionTx = await rejectTx(safe, transaction)
```

تحديث حساب multisig (المالكين والعتبة)

وفقًا لأية معاملة أخرى ، يتطلب تغيير الخصائص الرئيسية لحساب multisig إنشاء معاملة جديدة والموافقة عليها قبل تنفيذها.

```typescript=
// Create a transaction to add a new owner
const ownerTx = await safe.getAddOwnerTx(newOwner, newThreshold)
// Create a transaction to remove an owner
const ownerTx = await safe.getRemoveOwnerTx(existingOwner, newThreshold)
// Create a transaction to replace an owner
const ownerTx = await safe.getSwapOwnerTx(oldOwner, newOwner)
```

من المهم أن نأخذ ذلك في الاعتبار

newThreshold

يجب تعيينها وفقًا للمالكين الحاليين. إذا كان الملاك الحاليون ثلاثة ، وقمنا بإضافة مالك جديد ، فإن

newThreshold

لا يمكن تعيينه إلى أربعة ، ولكن يمكن أن يكون ثلاثة على الأكثر ، مثل العدد الحالي للمالكين.

في النهاية ، من الممكن أيضًا تغيير ملف

threshold

دون تغيير أصحابها.

```typescript=
const thresholdTx = await safe.getChangeThresholdTx(newThreshold)
```

لن تغير العمليات المذكورة أعلاه الحساب الآمن ، بل تنشئ المعاملات ذات الصلة. سيتم تطبيق التغييرات فقط بعد تنفيذ الصفقة.

قاموس المصطلحات

  • multisig: حساب أو معاملة تتطلب توقيعات متعددة قبل تنفيذها
  • العتبة: عدد التوقيعات المطلوبة لتنفيذ معاملة
  • المالك: العنوان المسموح له بتنفيذ العمليات على حساب multisig

مراجع حسابات

هل عندك أسئلة أبعد؟

يرجى الاتصال بنا من خلال Slack المفتوح للأسئلة الفنية والدعم.

يمكنك أيضًا التواصل مع أي تعليقات ترغب في مشاركتها معنا من خلال قنوات ومنتديات وسائل التواصل الاجتماعي الخاصة بنا:

علامات

انضم إلى Hacker Noon

قم بإنشاء حسابك المجاني لفتح تجربة القراءة المخصصة الخاصة بك.

أفلاطون. Web3 مُعاد تصوره. تضخيم ذكاء البيانات.
انقر هنا للوصول.

المصدر: https://hackernoon.com/how-to-create-a-multisig-account-n42i37x4؟

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة