سوليديتي (لغة برمجة)

سوليديتي  هي لغة برمجة موجهة للكائنات لتنفيذ العقود الذكية   على منصات بلوكتشين مختلفة، وأبرزها إيثريوم.  سوليديتي مرخصة بموجب رخصة جنو العمومية العامة v3.0 .  تم تصميم سوليديتي بواسطة غافن وود   وتم تطويرها بواسطة كريستسان رايتوايستنر و آلكس برغزازي والعديد من المساهمين السابقين في بلوكتشين إيثيريوم الأساسية.  يتم تشغيل البرامج في سوليديتي على جهاز آلة إيثريوم الافتراضية أو على أجهزة افتراضية متوافقة.

تاريخ 
تم اقتراح سوليديتي في آب \ أغسطس ٢٠١٤ من قبل غافن وود   تم تطوير اللغة لاحقًا بواسطة فريق سوليديتي التابع لمشروع إيثيريوم ، بقيادة كريستيان رايتوايستنر.

سوليديتي هي اللغة الأساسية في إيثيريوم وكذلك في شبكات بلوكتشين أخرى، مثل Hyperledger Fabric blockchain الموجهة للمؤسسات. نشرت SWIFT دليلًا على المفهوم باستخدام سوليديتي الذي يعمل على Hyperledger Fabric.

وصف 
سوليديتي هي لغة برمجة مكتوبة بشكل ثابت مصممة لتطوير العقود الذكية التي تعمل على جهاز آلة إيثريوم الافتراضية (EVM) أو أجهزة افتراضية متوافقة. 

تستخدم سوليديتي بناء جملة يشبه ECMAScript مما يجعلها مألوفةً لمطوري الويب الحاليين؛  ومع ذلك ، على عكس ECMAScript ، فإنها تحتوي على كتابة ثابتة وأنواع إرجاع متغيرة. تختلف سوليديتي عن اللغات الأخرى التي تستهدف آلة إيثريوم الافتراضية مثل Serpent وMutan في بعض النواحي المهمة. وهي تدعم متغيرات الأعضاء المعقدة للعقود الذكية، بما في ذلك التعيينات والهياكل الهرمية الاعتباطية. يدعم عقد سوليديتي الذكي خاصية الوراثة ، بما في ذلك الوراثة المتعددة باستخدام خطية C3 . تقدم سوليديتي واجهة تطبيق ثنائية (ABI) تسهل وظائف متعددة من النوع الآمن ضمن عقد ذكي واحد (تم دعم هذا لاحقًا بواسطة Serpent). يتضمن اقتراح سوليديتي أيضًا "مواصفات اللغة الطبيعية" ، وهو نظام توثيق لتحديد الأوصاف التي تتمحور حول المستخدم لتداعيات [الطريقة (برمجة الكمبيوتر) | طريقة] - المكالمات.   [ مطلوب مصدر غير أساسي ]

مثال على برنامج سوليديتي:  // SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;

contract Coin {
    // The keyword "public" makes variables
    // accessible from other contracts
    address public minter;
    mapping(address => uint) public balances;

    // Events allow clients to react to specific
    // contract changes you declare
    event Sent(address from, address to, uint amount);

    // Constructor code is only run when the contract
    // is created
    constructor() {
        minter = msg.sender;
    }

    // Sends an amount of newly created coins to an address
    // Can only be called by the contract creator
    function mint(address receiver, uint amount) public {
        require(msg.sender == minter);
        balances[receiver] += amount;
    }

    // Errors allow you to provide information about
    // why an operation failed. They are returned
    // to the caller of the function.
    error InsufficientBalance(uint requested, uint available);

    // Sends an amount of existing coins
    // from any caller to an address
    function send(address receiver, uint amount) public {
        if (amount > balances[msg.sender])
            revert InsufficientBalance({
                requested: amount,
                available: balances[msg.sender]
            });

        balances[msg.sender] -= amount;
        balances[receiver] += amount;
        emit Sent(msg.sender, receiver, amount);
    }
}

مراجع 

إيثريوم
برمجة كائنية التوجه
لغات برمجة إستاتيكية
لغات برمجة مخصصة النطاق