मैं अपने लेबल को अपने सॉलिडिटी स्मार्ट कॉन्ट्रैक्ट फंक्शन में जावास्क्रिप्ट फ़ंक्शन कॉल के साथ अपडेट करने के लिए नहीं प्राप्त कर सकता। मैं एक बटन क्लिक के साथ HTML में मान प्रदर्शित करने के लिए दृढ़ता में एक (पूर्णांक, स्ट्रिंग) मानचित्र बनाने की कोशिश कर रहा हूं। किसी कारण से threatActor.getActor(1,function(error, result) NULL लौटाता है।

क्या कोई मुझे सही दिशा में देख सकता है और मेरी मदद कर सकता है? धन्यवाद।

HTML कोड:

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>

    <link rel="stylesheet" type="text/css" href="main.css">

    <script src="/home/zachary/employee-eth/node_modules/web3/dist/web3.min.js"></script>


</head>
<body>
    <div class="container">
    <div class="container1">

        <label for="labels" class="col-lg-2 control-label">Labels: </label>
        <input id="labels" type="text">

        <label for="aliases" class="col-lg-2 control-label">Aliases: </label>
        <input id="aliases" type="text">

        <label for="roles" class="col-lg-2 control-label">Roles: </label>
        <input id="roles" type="text">

        <label for="goals" class="col-lg-2 control-label">Goals: </label>
        <input id="goals" type="text">

        <label for="resource_level" class="col-lg-2 control-label">Organization: </label>
        <input id="resource_level" type="text">

        <label for="sophistication" class="col-lg-2 control-label">Sophistication: </label>
        <input id="sophistication" type="text">

        <label for="primary_motivation" class="col-lg-2 control-label">Primary Motivation: </label>
        <input id="primary_motivation" type="text">

        <button id="buttonSet">Submit Threat</button>
        <div id="container">
        <div id="container1"><button id="buttonGet">Get Threats by ID</button></div>
        <div id="container2"><input id="getId" type="text" value="1"></div>
        </div>

    </div>
    <div class="container2">

        <h1>Actor Attributes</h1>

        <label for="actorID" class="col-lg-2 control-label">ID: </label>
        <label id="actorID_d" class="col-lg-2 control-label">Empty</label>

        <label for="labels" class="col-lg-2 control-label">Labels: </label>
        <label id="labels_d" class="col-lg-2 control-label">Empty</label>

        <label for="aliases" class="col-lg-2 control-label">Aliases: </label>
        <label id="aliases_d" class="col-lg-2 control-label">Empty</label>

        <label for="roles" class="col-lg-2 control-label">Roles: </label>
        <label id="roles_d" class="col-lg-2 control-label">Empty</label>

        <label for="goals" class="col-lg-2 control-label">Goals: </label>
        <label id="goals_d" class="col-lg-2 control-label">Empty</label>

        <label for="resource_level" class="col-lg-2 control-label">Organization: </label>
        <label id="resource_level_d" class="col-lg-2 control-label">Empty</label>

        <label for="sophistication" class="col-lg-2 control-label">Sophistication: </label>
        <label id="sophistication_d" class="col-lg-2 control-label">Empty</label>

        <label for="primary_motivation" class="col-lg-2 control-label">Primary Motivation: </label>
        <label id="primary_motivation_d" class="col-lg-2 control-label">Empty</label>

    </div>
</div>
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>

    <script>

        if (typeof web3 !== 'undefined') {
            web3 = new Web3(web3.currentProvider);
        } else {
            web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
        }
        web3.eth.defaultAccount = web3.eth.accounts[0];
        var threatActorContract = web3.eth.contract([
    {
        "constant": false,
        "inputs": [
            {
                "name": "_labels",
                "type": "string"
            },
            {
                "name": "_aliases",
                "type": "string"
            },
            {
                "name": "_roles",
                "type": "string"
            },
            {
                "name": "_goals",
                "type": "string"
            },
            {
                "name": "_resource_level",
                "type": "string"
            },
            {
                "name": "_sophistication",
                "type": "string"
            },
            {
                "name": "_primary_motivation",
                "type": "string"
            }
        ],
        "name": "addActor",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "",
                "type": "uint256"
            }
        ],
        "name": "actors",
        "outputs": [
            {
                "name": "labels",
                "type": "string"
            },
            {
                "name": "aliases",
                "type": "string"
            },
            {
                "name": "roles",
                "type": "string"
            },
            {
                "name": "goals",
                "type": "string"
            },
            {
                "name": "resource_level",
                "type": "string"
            },
            {
                "name": "sophistication",
                "type": "string"
            },
            {
                "name": "primary_motivation",
                "type": "string"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "countActors",
        "outputs": [
            {
                "name": "",
                "type": "uint256"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "_key",
                "type": "uint256"
            }
        ],
        "name": "getActor",
        "outputs": [
            {
                "name": "",
                "type": "string"
            },
            {
                "name": "",
                "type": "string"
            },
            {
                "name": "",
                "type": "string"
            },
            {
                "name": "",
                "type": "string"
            },
            {
                "name": "",
                "type": "string"
            },
            {
                "name": "",
                "type": "string"
            },
            {
                "name": "",
                "type": "string"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    }
]);

        var threatActor = threatActorContract.at("0xcf5f9fb59f9b22810c50a9158b393388c492c258");
        console.log(threatActor);

        $("#buttonSet").click(function() {
            threatActor.addActor($("#labels").val(), $("#aliases").val(), $("#roles").val(), $("#goals").val(),
            $("#resource_level").val(), $("#sophistication").val(), $("#primary_motivation").val());
        });

        $("#buttonGet").click(function() {

            threatActor.getActor(1,function(error, result) {

            if(!error)
                {
                    document.getElementById("#labels_d").innerHTML = result[0];
                    document.getElementById("#aliases_d").innerHTML = result[1];
                    document.getElementById("#roles_d").innerHTML = result[2];
                    document.getElementById("#goals_d").innerHTML = result[3];
                    document.getElementById("#resource_level_d").innerHTML = result[4];
                    document.getElementById("#sophistication_d").innerHTML = result[5];
                    document.getElementById("#primary_motivation_d").innerHTML = result[6];
                    console.log(result);
                }
                else {
                    console.error("ERROR!");
                }
        });

        });
    </script>

</body>
</html>

सॉलिडिटी स्मार्ट कॉन्ट्रैक्ट कोड:

 pragma solidity ^0.4.24;
    contract ThreatActors {

        uint actorAmount = 1;

        struct Actor{
            string labels;
            string aliases;
            string roles;
            string goals;
            string resource_level;
            string sophistication;
            string primary_motivation;
        }

       Actor[] public actors;


    function addActor(string _labels, string _aliases, string _roles, string _goals, string _resource_level, string _sophistication, string _primary_motivation) public
        {
            Actor memory actor = Actor(_labels, _aliases, _roles, _goals, _resource_level, _sophistication, _primary_motivation);

            actors.push(actor);

            actorAmount++;
        }


    function getActor(uint _key) view public returns (string, string, string, string, string, string, string) {
        return (actors[_key].labels, actors[_key].aliases, actors[_key].roles, actors[_key].goals, actors[_key].resource_level, actors[_key].sophistication, actors[_key].primary_motivation);
    }

    function countActors() view public returns (uint) {
        return actors.length;
    }

    }
0
OneShot 5 अक्टूबर 2018, 03:37

1 उत्तर

सबसे बढ़िया उत्तर

तो जब आप कहते हैं कि यह न्यूल लौटाता है, तो आपका मतलब है कि कॉलबैक फ़ंक्शन में result न्यूल है, सही है? यदि ऐसा है तो मेरे पास कुछ अनुमान हैं लेकिन कुछ भी ठोस नहीं है:

  1. फ़ंक्शन में पास होने पर आपका इनपुट किसी तरह गलत अनुवाद किया जाता है। यह एक uint256 की अपेक्षा करता है और आप संख्या को शाब्दिक 1 देते हैं। मुझे यह मानना ​​​​चाहिए कि यह काम करना चाहिए, लेकिन मैं आमतौर पर बिगनंबर में अपने नंबर लपेटने के लिए चिपक जाता हूं और कभी भी शाब्दिक उपयोग नहीं किया है (लेकिन फिर, यह काम क्यों नहीं करेगा)।
  2. आप सॉलिडिटी में स्ट्रिंग्स का उपयोग कर रहे हैं। मेरे संरचना आकार और स्मृति उपयोग पर पूर्ण नियंत्रण रखने के लिए मैं लगभग कभी भी गतिशील सरणी का उपयोग नहीं करता हूं। उनके पास निश्चित रूप से उपयोग होते हैं, लेकिन आमतौर पर एक mapping वह कर सकता है जो एक गतिशील सरणी कर सकता है, और 32 वर्ण (bytes32) अधिकांश मामलों के लिए पर्याप्त से अधिक है string का उपयोग किया जाएगा। मुझे बिल्कुल यकीन नहीं है कि यह समस्या कहां पैदा कर सकता है लेकिन मुझे लगा कि मैं इसे इंगित करूंगा।
  3. हो सकता है कि वेब3 का आपका संस्करण गलत हो। मुझे पता है कि कुछ संस्करण केवल फ़ंक्शन को कॉल करने के साथ ठीक हैं, जबकि अन्य उपयोग करने के लिए कॉल/भेजना पसंद करते हैं (इस पर निर्भर करता है कि यह निरंतर कार्य है)। यदि आप 1.0 का उपयोग कर रहे हैं तो में देखा जा सकता है। दस्तावेज़.
1
Matthew Ludwig 6 अक्टूबर 2018, 22:48