Geth的进行合约部署和调用合约方法

news2024/11/25 3:53:16

环境 Ubuntu20
geth : 1.10.5-stable
go: 1.17

前言

还未安装geth的读者可以参考这篇文章 Geth的安装并简单使用篇
我们需要进入geth交互式控制台进行操作

root@192-168-19-133:~# geth --dev console
INFO [10-03|22:25:29.918] Starting Geth in ephemeral dev mode...
INFO [10-03|22:25:29.920] Maximum peer count                       ETH=50 LES=0 total=50
INFO [10-03|22:25:29.920] Smartcard socket not found, disabling    err="stat /run/pcscd/pcscd.comm: no such file or directory"
INFO [10-03|22:25:29.920] Set global gas cap                       cap=50,000,000
INFO [10-03|22:25:30.075] Using developer account                  address=0x0869A17CFC7cFdD8E5d2821475f9e5B3DA837847
INFO [10-03|22:25:30.075] Allocated trie memory caches             clean=154.00MiB dirty=256.00MiB
INFO [10-03|22:25:30.075] Writing custom genesis block
INFO [10-03|22:25:30.076] Persisted trie from memory database      nodes=13 size=1.90KiB time="35.761µs" gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [10-03|22:25:30.076] Initialised chain configuration          config="{ChainID: 1337 Homestead: 0 DAO: <nil> DAOSupport: false EIP150: 0 EIP155: 0 EIP158: 0 Byzantium: 0 Constantinople: 0 Petersburg: 0 Istanbul: 0, Muir Glacier: 0, Berlin: 0, London: 0, Engine: clique}"
INFO [10-03|22:25:30.076] Initialising Ethereum protocol           network=1337 dbversion=<nil>
INFO [10-03|22:25:30.076] Loaded most recent local header          number=0 hash=64db98..88a9f8 td=1 age=54y6mo1w
INFO [10-03|22:25:30.076] Loaded most recent local full block      number=0 hash=64db98..88a9f8 td=1 age=54y6mo1w
INFO [10-03|22:25:30.076] Loaded most recent local fast block      number=0 hash=64db98..88a9f8 td=1 age=54y6mo1w
WARN [10-03|22:25:30.076] Failed to load snapshot, regenerating    err="missing or corrupted snapshot"
INFO [10-03|22:25:30.076] Rebuilding state snapshot
INFO [10-03|22:25:30.077] Gasprice oracle is ignoring threshold set threshold=2
INFO [10-03|22:25:30.077] Resuming state snapshot generation       root=5ec2e4..313670 accounts=0 slots=0 storage=0.00B elapsed="443.529µs"
WARN [10-03|22:25:30.077] Error reading unclean shutdown markers   error="not found"
INFO [10-03|22:25:30.077] Stored checkpoint snapshot to disk       number=0 hash=64db98..88a9f8
INFO [10-03|22:25:30.077] Starting peer-to-peer node               instance=Geth/v1.10.5-stable-33ca98ec/linux-amd64/go1.17.13
INFO [10-03|22:25:30.078] Generated state snapshot                 accounts=10 slots=0 storage=412.00B elapsed=1.102ms
WARN [10-03|22:25:30.078] P2P server will be useless, neither dialing nor listening
INFO [10-03|22:25:30.082] IPC endpoint opened                      url=/tmp/geth.ipc
INFO [10-03|22:25:30.082] New local node record                    seq=1 id=e36bda3a0591e439 ip=127.0.0.1 udp=0 tcp=0
INFO [10-03|22:25:30.082] Started P2P networking                   self=enode://95e1696271cbf98961dc50be37d4c7bcea61ec3c77b5ea8d6fb0891f2204b834c0d8698e432338a3f6cd5f4af78f5456b16d1020f1a465499c88d3c995bf5865@127.0.0.1:0
INFO [10-03|22:25:30.082] Transaction pool price threshold updated price=1,000,000,000
INFO [10-03|22:25:30.082] Transaction pool price threshold updated price=1
INFO [10-03|22:25:30.082] Etherbase automatically configured       address=0x0869A17CFC7cFdD8E5d2821475f9e5B3DA837847
WARN [10-03|22:25:30.082] Failed to get free disk space            path= err="failed to call Statfs: no such file or directory"
INFO [10-03|22:25:30.082] Commit new mining work                   number=1 sealhash=5ba048..aa9c9c uncles=0 txs=0 gas=0 fees=0 elapsed="112.52µs"
INFO [10-03|22:25:30.083] Sealing paused, waiting for transactions
Welcome to the Geth JavaScript console!

instance: Geth/v1.10.5-stable-33ca98ec/linux-amd64/go1.17.13
coinbase: 0x0869a17cfc7cfdd8e5d2821475f9e5b3da837847
at block: 0 (Thu Jan 01 1970 08:00:00 GMT+0800 (CST))
 datadir:
 modules: admin:1.0 clique:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

To exit, press ctrl-d

部署合约需要的数据

我们准备部署一个HelloWorld合约到geth上去。

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract HelloWorld{

    string public temp;


    constructor()  {
        temp =  "nihao,geth";
    }

    function set(string memory _temp) public  {
        temp = _temp;
    }

    function get() public  view returns (string memory){
        return  temp;
    }
}

但是部署合约不需要其sol文件,而是需要sol文件编译好后,产生的binabi文件。
我们可以在remix编译器进行准备这两个文件。记得写完合约按住ctrl +s ,保存并编译合约
在这里插入图片描述

在geth创建一个合约对象

首先我们需要准备好abi文件

[
	{
		"inputs": [],
		"stateMutability": "nonpayable",
		"type": "constructor"
	},
	{
		"inputs": [],
		"name": "get",
		"outputs": [
			{
				"internalType": "string",
				"name": "",
				"type": "string"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "string",
				"name": "_temp",
				"type": "string"
			}
		],
		"name": "set",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "temp",
		"outputs": [
			{
				"internalType": "string",
				"name": "",
				"type": "string"
			}
		],
		"stateMutability": "view",
		"type": "function"
	}
]

可能这个格式在geth的交互式命令行会报错【因为空格会识别导致换行】
我们可以在json解析网站进行压缩,变成一行数据
在这里插入图片描述

然后进行创建对象
web.eth.contract(abi文件)

> var helloWorld = web3.eth.contract([{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"get","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_temp","type":"string"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"temp","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}])
undefined

回车出现undefined说明此命令成功

使用合约对象创建合约实例

这时候需要bin文件和一个合约用户,合约用户我们选择用 accounts[0]
在这里插入图片描述

然后我们使用 合约对象.new({from: 部署合约用户地址, data: bin文件, gas : 消耗的gas量}, 加一个部署成功后的回调方法)
注意,在remix复制的bin文件是十六进制的,但是它没有加前缀0x,我们进行部署的时候,需要将其加上

> var contractByHelloWorld = helloWorld.new({from: web3.eth.accounts[0] ,data:'0x60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f6e6968616f2c676574680000000000000000000000000000000000000000000081525060009081620000589190620002d9565b50620003c0565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620000e157607f821691505b602082108103620000f757620000f662000099565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001617fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000122565b6200016d868362000122565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620001ba620001b4620001ae8462000185565b6200018f565b62000185565b9050919050565b6000819050919050565b620001d68362000199565b620001ee620001e582620001c1565b8484546200012f565b825550505050565b600090565b62000205620001f6565b62000212818484620001cb565b505050565b5b818110156200023a576200022e600082620001fb565b60018101905062000218565b5050565b601f82111562000289576200025381620000fd565b6200025e8462000112565b810160208510156200026e578190505b620002866200027d8562000112565b83018262000217565b50505b505050565b600082821c905092915050565b6000620002ae600019846008026200028e565b1980831691505092915050565b6000620002c983836200029b565b9150826002028217905092915050565b620002e4826200005f565b67ffffffffffffffff8111156200030057620002ff6200006a565b5b6200030c8254620000c8565b620003198282856200023e565b600060209050601f8311600181146200035157600084156200033c578287015190505b620003488582620002bb565b865550620003b8565b601f1984166200036186620000fd565b60005b828110156200038b5784890151825560018201915060208501945060208101905062000364565b86831015620003ab5784890151620003a7601f8916826200029b565b8355505b6001600288020188555050505b505050505050565b61073380620003d06000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80634ed3885e14610046578063673402e5146100625780636d4ce63c14610080575b600080fd5b610060600480360381019061005b919061032b565b61009e565b005b61006a6100b1565b60405161007791906103f3565b60405180910390f35b61008861013f565b60405161009591906103f3565b60405180910390f35b80600090816100ad919061062b565b5050565b600080546100be90610444565b80601f01602080910402602001604051908101604052809291908181526020018280546100ea90610444565b80156101375780601f1061010c57610100808354040283529160200191610137565b820191906000526020600020905b81548152906001019060200180831161011a57829003601f168201915b505050505081565b60606000805461014e90610444565b80601f016020809104026020016040519081016040528092919081815260200182805461017a90610444565b80156101c75780601f1061019c576101008083540402835291602001916101c7565b820191906000526020600020905b8154815290600101906020018083116101aa57829003601f168201915b5050505050905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610238826101ef565b810181811067ffffffffffffffff8211171561025757610256610200565b5b80604052505050565b600061026a6101d1565b9050610276828261022f565b919050565b600067ffffffffffffffff82111561029657610295610200565b5b61029f826101ef565b9050602081019050919050565b82818337600083830152505050565b60006102ce6102c98461027b565b610260565b9050828152602081018484840111156102ea576102e96101ea565b5b6102f58482856102ac565b509392505050565b600082601f830112610312576103116101e5565b5b81356103228482602086016102bb565b91505092915050565b600060208284031215610341576103406101db565b5b600082013567ffffffffffffffff81111561035f5761035e6101e0565b5b61036b848285016102fd565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156103ae578082015181840152602081019050610393565b60008484015250505050565b60006103c582610374565b6103cf818561037f565b93506103df818560208601610390565b6103e8816101ef565b840191505092915050565b6000602082019050818103600083015261040d81846103ba565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061045c57607f821691505b60208210810361046f5761046e610415565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026104d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261049a565b6104e1868361049a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061052861052361051e846104f9565b610503565b6104f9565b9050919050565b6000819050919050565b6105428361050d565b61055661054e8261052f565b8484546104a7565b825550505050565b600090565b61056b61055e565b610576818484610539565b505050565b5b8181101561059a5761058f600082610563565b60018101905061057c565b5050565b601f8211156105df576105b081610475565b6105b98461048a565b810160208510156105c8578190505b6105dc6105d48561048a565b83018261057b565b50505b505050565b600082821c905092915050565b6000610602600019846008026105e4565b1980831691505092915050565b600061061b83836105f1565b9150826002028217905092915050565b61063482610374565b67ffffffffffffffff81111561064d5761064c610200565b5b6106578254610444565b61066282828561059e565b600060209050601f8311600181146106955760008415610683578287015190505b61068d858261060f565b8655506106f5565b601f1984166106a386610475565b60005b828110156106cb578489015182556001820191506020850194506020810190506106a6565b868310156106e857848901516106e4601f8916826105f1565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220449aa5d0303ec1aeba92eb4c743f556c8c8b8afbbce61588e7bcf9eeb0d9f1fd64736f6c63430008120033',gas: '4700000' }, function (e, contract){ console.log(e, contract); if (typeof contract.address !== 'undefined') { console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash); } })
INFO [10-03|23:32:52.868] Setting new local account                address=0x0869A17CFC7cFdD8E5d2821475f9e5B3DA837847
INFO [10-03|23:32:52.868] Submitted contract creation              hash=0xff9564323cd840f060323931e8734266114eada7a6ea75be61dbe6d24121d5cc from=0x0869A17CFC7cFdD8E5d2821475f9e5B3DA837847 nonce=0 contract=0xE9982Bd796DFA1a9641D2724d2466593fF636C22 value=0
null [object Object]
INFO [10-03|23:32:52.869] Commit new mining work                   number=1 sealhash=f0420b..268c9c uncles=0 txs=1 gas=486,036 fees=4.86036e-13 elapsed="392.553µs"
undefined
> INFO [10-03|23:32:52.869] Successfully sealed new block            number=1 sealhash=f0420b..268c9c hash=91728b..c87c6a elapsed="395.22µs"
INFO [10-03|23:32:52.869] 🔨 mined potential block                  number=1 hash=91728b..c87c6a
INFO [10-03|23:32:52.869] Commit new mining work                   number=2 sealhash=f3fc8d..425a7f uncles=0 txs=0 gas=0       fees=0           elapsed="184.106µs"
INFO [10-03|23:32:52.869] Sealing paused, waiting for transactions
null [object Object]
Contract mined! address: 0xe9982bd796dfa1a9641d2724d2466593ff636c22 transactionHash: 0xff9564323cd840f060323931e8734266114eada7a6ea75be61dbe6d24121d5cc

这样合约就部署成功了,地址是0xE9982Bd796DFA1a9641D2724d2466593fF636C22

当然,我们不需要使用地址,因为我们创建了个合约实例contractByHelloWorld ,直接使用此就可以进行调用方法

调用合约实例的方法

set 方法 因为其方法需要交易并付gas ,所以格式是 合约实例.方法名. sendTransaction(“参数”,“参数” … , {from: 调用用户地址})

> contractByHelloWorld.set.sendTransaction("你好,geth",{from: eth.accounts[0]})
INFO [10-03|23:44:26.521] Submitted transaction                    hash=0xa37e32c323a475264a7cf231b02908e56590bc285f174255d3fef4de237fba72 from=0x0869A17CFC7cFdD8E5d2821475f9e5B3DA837847 nonce=1 recipient=0xE9982Bd796DFA1a9641D2724d2466593fF636C22 value=0
"0xa37e32c323a475264a7cf231b02908e56590bc285f174255d3fef4de237fba72"
> INFO [10-03|23:44:26.521] Commit new mining work                   number=2 sealhash=38978f..c36e7b uncles=0 txs=1 gas=28146   fees=2.8146e-14  elapsed="237.563µs"
INFO [10-03|23:44:26.521] Successfully sealed new block            number=2 sealhash=38978f..c36e7b hash=a319ef..4ae588 elapsed="385.036µs"
INFO [10-03|23:44:26.521] 🔨 mined potential block                  number=2 hash=a319ef..4ae588
INFO [10-03|23:44:26.522] Commit new mining work                   number=3 sealhash=f2bead..39aa1b uncles=0 txs=0 gas=0       fees=0           elapsed="129.179µs"
INFO [10-03|23:44:26.522] Sealing paused, waiting for transactions

get 方法 不需要交易 所以格式是 合约实例.方法名.call(“参数”,“参数”…)

> contractByHelloWorld.get.call()
"你好,geth"
>

结语

这是简单的部署合约,但是有一个问题,我们这个合约是无参构造的合约,部署的时候不需要携带参数,但是如果合约部署的时候是有参的呢 ?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1161219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

list集合中的元素排序

目录 一、利用lambda对list集合排序 二、对对象集合操作&#xff0c;其实与基本类型集合操作类似 三、对 JSONArray 排序 一、利用lambda对list集合排序 先定义一个集合 List<Integer> list new ArrayList<>(); list.add(1); list.add(5); list.add(4); list…

基于SSM的酒店客房预定管理系统

基于SSM的酒店客房预定管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台主页 客房详情 登录界面 管理员界面 用户界面 摘要 基于SSM&#xff08;…

逻辑分析仪与示波器选择

一、简介 逻辑分析仪是利用时钟从测试设备上采集和显示数字信号的仪器&#xff0c;最主要的作用在于时序判定。逻辑分析仪与示波器不同&#xff0c;它不能显示连续的模拟量波形&#xff0c;而只显示高低两种电平状态&#xff08;逻辑1和0&#xff09;。在设置了参考电压后&…

JDK环境变量配置

windows系统 1. win建 r 输入sysdm.cpl打开系统属性界面。选择高级栏目&#xff0c;点击环境变量菜单。 2. 选择系统变量中的新建&#xff0c;变量名输入JAVA_HOME&#xff0c;变量值输入jdk安装目录&#xff0c;例如&#xff1a;D:\Java\jdk1.8.0_91。 3. 选择编辑系统变量中…

容斥原理,多步容斥

容斥意义法 设计状态表示容斥的过程。比较简单的容斥题目一般可以容斥意义。 如果我们要求方案数的话&#xff0c;通常情况下我们的把限制视为两个方面&#xff0c;一方面是总限制&#xff0c;一方面是对于每个物品的限制&#xff0c;这样设集合 S i S_i Si​表示满足总限制以及…

VSCode 如何设置背景图片

VSCode 设置背景图片 1.打开应用商店&#xff0c;搜索 background &#xff0c;选择第一个&#xff0c;点击安装。 2. 安装完成后点击设置&#xff0c;点击扩展设置。 3.点击在 settings.json 中编辑。 4.将原代码注释后&#xff0c;加入以下代码。 // { // "workben…

中海达守护电力人员作业安全

近日&#xff0c;中海达为电网某换流站作业人员提供的160余套北斗高精度定位产品顺利完成交付。通过使用北斗高精度定位技术&#xff0c;帮助换流站实现了人员&#xff08;车辆&#xff09;位置实时定位、电子围栏实时预警、远程作业指导等应用效果&#xff0c;用高科技保障电网…

红米redmi note7救砖/线刷/ROOT教程

一直循环开机界面&#xff0c;需要刷机 准备 使用windows电脑安装如下 MiUsbDriver.exe电脑连接小米手机驱动。可以去https://www.miui.com/unlock/index.html下载压缩包&#xff0c;里面有这个程序小米ROM固件包找一个适合自己手机型号的的即可&#xff0c;官网也可以下载但…

3D RPG Course | Core 学习日记三:Navigation智能导航地图烘焙

前言 前面我们已经绘制好了一个简单的地图场景&#xff0c;现在我们需要使用Navigation给地图做智能导航&#xff0c;以实现AI自动寻路&#xff0c;以及设置地图的可行走区域以及不可行走区域&#xff0c;Navigation的基础知识、原理、用法在Unity的官方文档&#xff0c;以及网…

Modelsim 使用教程(2)——Basic Simulation

一、概述 在本文中&#xff0c;我们将介绍Modelsim基本的仿真流程&#xff0c;包括有&#xff1a; Create the Working Design Library&#xff08;创建工具库&#xff09; Compile the Design Units&#xff08;编译设计单元&#xff09; Optimize the Design&#xff08;优化…

单工通信、半双工通信、全双工通信分别是什么?

单工通信&#xff1a; 单工通信是一种单向传输数据的通信方式&#xff0c;只允许信息在一个方向上流动。在单工通信中&#xff0c;通信的两个节点中的一个节点只能作为发送方&#xff0c;而另一个节点只能作为接收方。发送方只负责发送数据&#xff0c;而接收方只负责接收数据&…

LLMs之Agent之AutoGen:AutoGen的简介、安装、使用方法之详细攻略

LLMs之Agent之AutoGen&#xff1a;AutoGen的简介、安装、使用方法之详细攻略 目录 AutoGen的简介、安装、使用方法 1、多Agent对话框架 2、AutoGen的对话流程 3、增强的LLM推理 AutoGen的安装 1、安装 2、快速测试 AutoGen的使用方法 1、基础用法 (1)、启动两个代理之…

C++:map和set的基本使用

文章目录 搜索模型关联式容器setset的基本使用set的其他使用 multisetmapmap的基本使用map中的[] multimap 搜索模型 在实际搜索中有两个搜索模型&#xff1a;Key的搜索模型和Key/Value的搜索模型 Key的搜索模型&#xff1a; 简单来说就是在一个搜索树&#xff0c;搜索树中的…

大桌子安装笔记

单位弄了个服务器&#xff0c;里面全是虚拟机&#xff0c;自己也学着建了一个测试用的虚拟机&#xff0c;不知道干点啥好&#xff0c;朋友说做个网盘吧&#xff0c;就用大桌子。 于是&#xff0c;干起来&#xff0c;不会配制&#xff0c;就跟朋友一步一步学起来。 他说&#…

服务熔断保护实践--Sentinal

目录 概述 环境说明 步骤 Sentinel服务端 Sentinel客户端 依赖 在客户端配置sentinel参数 测试 保护规则设置 设置资源名 设置默认的熔断规则 RestTemplate的流控规则 Feign的流控规则 概述 微服务有很多互相调用的服务&#xff0c;构成一系列的调用链路&#xf…

LangChain介绍及代码实践

一、简介 LangChian 作为一个大语言模型开发框架&#xff0c;是 LLM 应用架构的重要一环。那什么是 LLM 应用架构呢&#xff1f;其实就是指基于语言模型的应用程序设计和开发的架构。 LangChian 可以将 LLM 模型、向量数据库、交互层 Prompt、外部知识、外部工具整合到一起&a…

如何看待将本增效?

如何看待将本增效&#xff1f; 么是降本增效&#xff1f;就是公司里&#xff0c;增进收益的动作要多做&#xff0c;无效的动作要少做&#xff0c;甚至不做。什么叫有效&#xff1f;回到公司的经营目标上去&#xff0c;企业的管理就是目标管理。降本&#xff0c;需要卓越运营&a…

NLP学习笔记:使用 Python 进行NLTK

一、说明 本文和接下来的几篇文章将介绍 Python NLTK 库。NLTK — 自然语言工具包 — NLTK 是一个强大的开源库&#xff0c;用于 NLP 的研究和开发。它内置了 50 多个文本语料库和词汇资源。它支持文本标记化、词性标记、词干提取、词形还原、命名实体提取、分割、分类、语义推…

【计算系统】5分钟了解超算,高性能计算,并行计算,分布式计算,网格计算,集群计算以及云计算的区别

5分钟了解超算&#xff0c;高性能计算&#xff0c;并行计算&#xff0c;分布式计算&#xff0c;网格计算&#xff0c;集群计算以及云计算的区别 1. 超算2. 高性能计算3. 并行计算4. 分布式计算5. 网格计算6. 集群计算7. 云计算小结相关资料 1. 超算 超级计算机&#xff08;Sup…

Android拖放startDragAndDrop拖拽onDrawShadow静态添加xml布局View,Kotlin(4)

Android拖放startDragAndDrop拖拽onDrawShadow静态添加xml布局View&#xff0c;Kotlin&#xff08;4&#xff09; import android.content.ClipData import android.graphics.Canvas import android.graphics.Point import android.os.Bundle import android.util.Log import a…