Featured image of post أمثلة صلابة للمطور

أمثلة صلابة للمطور

ملاحظات الصلابة للمطور مع أمثلة.

Best Solidity examples and developer notes

Tips & Tricks

  • سيتم تحديث Ethereum بشكل متكرر حتى بناء مستقر.لذا توقع أفضل الممارسات الجديدة والنظر الأمني بين الحين والآخر.
  • سيكون الرمز الخاص بك يحتوي على أخطاء وكن مستعدًا للتعامل معها.استخدم تقنيات مثل إيقاف العقد والحد من الاستخدام.
  • الحفاظ على عقدك بسيط ومعيار.
  • استفد من المكتبات حتى تتمكن من إعادة استخدام التعليمات البرمجية وتحديثها.
  • حاول استخدام الأدوات والمكتبات المتاحة بالفعل وتحديثها بشكل ضئيلة.
  • لا تحاول أبدًا تخزين وتنفيذ كل شيء في صلابة.استخدمه حيث يلزم اللامركزية.

External calls

تجنب استخدام المكالمات الخارجية كلما كان ذلك ممكنًا.يمكن أن تؤدي المكالمات إلى الكود غير الموثوق إلى عيب أمني.عند استخدام مكالمات العقد الخارجية ، افترض أن الكود غير الآمن قد يتم تنفيذه.حتى إذا لم يكن العقد ضارًا ، فيمكن تنفيذ رمز ضار من خلال أي عقود يستدعيها.

استخدم المكالمات الخارجية في الجزء السفلي من الوظيفة لأنها ستقوم بإعادة توجيه جميع الغاز إلى الترفيه.

Use <address>.call.gas(gasAmount)() to limit sending gas to external calls.

Sending transaction from contracts

<address>.send() and <address>.transfer() are considered safe. It has a limited gas of 2300 which is low for any task except for an event.

<address>.transfer() will revert the transaction and <address>.send() will return false. Use it based on requirement.

Error handling

ستعود بعض الوظائف كاذبة إذا فشلت.تأكد من التعامل مع احتمال أن تفشل المكالمة ، عن طريق التحقق من قيمة الإرجاع. call, callcode, delegatecall, send are some functions that return false on failure.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// BAD
<address>.send(10);

// GOOD

// Including success and failure callbaks
if(<address>.send()) { 
    // OnSuccess
} else {
    // OnFail
}

// Using assert that will revert the transaction on false
assert(<address>.send())

Using access modifiers

استخدم معدلات الوصول بشكل صريح. Using external for external only function will reduce gas.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// BAD
function externalFunction() {
    // Do Something
}

// GOOD
uint public status;
function externalFunction() external {
    // Do Something
}

Make use of function modifiers

استخدم المعدلات لتقييد الوصول إلى الوظائف.تجنب الوصول غير المصرح به لجميع الوظائف. You should use msg.sender over tx.origin for authorization.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// BAD
function selfdestruct() {
    selfdestruct(<address>);
}

// GOOD
modifier onlyOwner() {
  require(msg.sender == <address of owner>);
  _
}
function selfdestruct() onlyOwner {
    selfdestruct(<address>);
}

Upgrading contracts

ßß Use delegatecall in a proxy contract for upgrading contracts overtime.

comments powered by Disqus
مبني بستخدام Hugo
قالب Stack مصمم من Jimmy