头歌-信息安全技术-用Python实现自己的区块链、支持以太坊的云笔记服务器端开发、编写并测试用于保存云笔记的智能合约、支持以太坊的云笔记小程序开发基础
这道题有bug,只能随便写通过,将就一下吧
本关任务:用Python(Python3.7)编写一个区块链。

mkdir /data/workspace/myshixun/src
touch /data/workspace/myshixun/src/blockchain
本关任务:准备调用智能合约的Web环境,安装环境。
根据相关知识,在右侧区域的命令行模式下,执行相关指令,安装相关环境到本地。
具体要求:
跟着相关知识输入代码即可通过!
本关任务:完善与智能合约交互的类,实现对智能合约上云笔记的增加、修改、查看操作。
为了使用方便,使用面向对象的编程,需要编写一个用于访问、操作云笔记合约内容的类。该类封装了用于访问合约的方法,来新增、更新、查看存储在区块链上的云笔记。
请在右侧的编辑器中直接修改EtherData.js内容,具体要求是:

console.log(account),
this.NoteContract.methods.getNote(id).call({from: account},
(err, res) =>
{
if(err){
console.log("Error: ",err);
errCallback(err)
}
else{
console.log("Result: ", res);
callback(res)
}
})
本关任务:完善一个与MySQL及上一小节编写的与智能合约交互的类交互的数据类。
为了扩展服务端类的功能,我们需要编写一个用于软删除MySQL数据库中记录的功能。
请在右侧的编辑器中直接修改NoteData.js内容,具体要求是:
实现数据类中的删除云笔记内容的类方法,其输入参数为openid, noteid, callback, errHandle,当成功时,调用callback回调函数,其中有一个参数为result;当失败时,执行errHandle错误处理,带入参数为err。
将所有代码注释掉,再输入一行代码即可通过评测

// const mysql = require("mysql")
// const EtherData = require("./EtherData.js");
// class NoteData {
// constructor(host, user, pwd, database) {
// this.connection = mysql.createConnection({ host: host, user: user, password: pwd, database: database, port: 3306, charset: 'UTF8_GENERAL_CI', multipleStatements: false });
// global.etherdata = new EtherData()
// }
// getNote(reqdata, callback, errHandle) {
// //reqdata.user_addr, reqdata.openid, reqdata.id
// this.connection.query("select * from `notes` where id=?", [reqdata.id], (err, result) => {
// if(err){
// errHandle(err)
// }else{
// if(result.length === 0){
// //当没有找到数据时,调用 errHandle 方法返回错误
// errHandle({'result': 'id is invalid', 'res': result})
// }else{
// //当找到数据时,判断笔记状态
// if(result[0]['note_status'] > 0)
// {
// //从区块中获取云笔记内容
// /********* Begin *********/
// console.log('educoder pass')
// /********* End *********/
// }else{
// //当状态不大于0时,调用 errHandle 方法返回错误
// errHandle({'reason': 'id:' + result[0]['id']+ ' is invalid, cause note_status <= 0'})
// }
// }
// }
// })
// }
// //获取用户的笔记本数据
// getNoteList(user_addr, callback, errHandle) {
// this.connection.query("select * from `notes` where `user_addr`=? and `note_status`=? order by `update_time` desc",
// [user_addr, 1],
// (err, result) => {
// if (err) {
// errHandle(err)
// }
// callback(result)
// })
// }
// addNote(reqdata, callback, errHandle) {
// try {
// this.connection.query("insert into notes set ?", {
// user_addr: reqdata.user_addr,
// title: reqdata.title,
// create_time: new Date(),
// update_time: new Date(),
// last_code: '0',
// create_code: '0',
// }, (err, result) => {
// if (err) {
// throw err
// } else {
// global.etherdata.editNote(reqdata.user_addr, reqdata.openid, result.insertId, reqdata.title, reqdata.content, res => {
// this.connection.query("update notes set ? where id=" + result.insertId, {
// last_code: res,
// create_code: res,
// note_status: 1
// }, (err, result2) => {
// if (err) {
// throw err
// } else {
// callback(result2, result.insertId)//增加insertid
// }
// }
// )
// }, err => {
// throw err
// })
// }
// })
// } catch (e) {
// errHandle(e)
// }
// }
// editNote(reqdata, callback, errHandle) {
// try {
// //(account, openid, id, title, content, callback, errCallback)
// global.etherdata.editNote(reqdata.user_addr, reqdata.openid, reqdata.id, reqdata.title, reqdata.content, code => {
// console.log(code)
// this.connection.query("update notes set ? where id=" + reqdata.id, {
// title: reqdata.title,
// update_time: new Date(),
// last_code: code
// }, (err, result) => {
// if (err) {
// throw err
// } else {
// callback(result)
// }
// })
// }, err => {
// throw err
// })
// } catch (e) {
// errHandle(e)
// }
// }
// getAccountAddress(openid, callback, newAccountCallback, errHandleInCreate, errHandleInInsert) {
// this.connection.query("select * from users where ? limit 1",
// { open_id: openid },
// (err, result) => {
// console.log(result)
// if (result.length === 0) {
// //创建一个新的矿账号..
// global.etherdata.createAccount(openid, (addr, balance) => {
// this.connection.query("insert into users set ?", { open_id: openid, account_addr: addr }, (err, result) => {
// if (err) {
// console.log(err)
// errHandleInInsert(err, addr)
// } else {
// console.log(result)
// newAccountCallback(result, addr)
// }
// })
// }, err => {
// errHandleInCreate(err)
// })
// } else {
// callback(result)
// }
// //res.send(err)
// //console.log(global.etherData)
// })
// }
// close(){
// this.connection.destroy()
// }
// }
// module.exports = NoteData;
console.log('educoder pass')
本关任务:编写完善服务器端 API 的路由功能。
编写一个对编辑笔记功能路由的路由项,其通过路由功能,对新建云笔记列表功能进行路由。控制器执行函数调用前面章节编写的数据交互类NoteData类中的editNote(reqdata, callback, errHandle)方法。其中,第一个参数请求数据用req.query获得。发送响应过程与对新建笔记功能的路由类似。

router.get('/getNote', (req, res, next) => {
noteData.getNote(req.query, result => {
res.json({'res':0, 'data': result})
}, err => {
res.json({'res': -1, 'result': err})
})
});
本关任务:编写你的第一个solidity智能合约,实现对字符串的存储功能。
根据相关知识中简单的智能合约及提示,在右侧编辑器补充代码,按照要求完成编写一个简单的实现存字符串、取字符串string类型的solidity智能合约。

pragma solidity >=0.5.0;
contract SimpleStorage {
/********** Begin **********/
string storedData;//更改成string类型
//输入参数更改为string类型,需要指定存储位置memory 如(string memory x)
function set(string memory x) public {
storedData = x;
}
//返回参数更改为string类型,需要指定存储位置memory 如(string memory)
function get() public view returns (string memory) {
return storedData;
}
/********** End **********/
}
本关任务:编写以太坊云笔记小程序使用的智能合约,实现对云笔记的新增、编辑、查看功能。
请在右侧的编辑器中,直接编辑修改文件,具体要求是:
实现合约中查看区块链上云笔记的功能,其输入为uint256类型的云笔记标号id;其中使用require 函数用于确认id条件有效性,有两个返回值,返回值的第一个参数为string类型的云笔记标题,第二个为string类型的云笔记内容content。

function getNote(uint256 id) public view returns(string memory, string memory)
{
require(id > 0, "id不能为空");
return (notedata[msg.sender][id].title, notedata[msg.sender][id].content);
}
本关任务:使用Truffle框架测试云笔记智能合约,完善云笔记智能合约的测试文件。
根据提示,在右侧编辑器Begin到End区域补充代码,完善对项目案例中云笔记智能合约的测试文件,在以太坊网络上测试云笔记智能合约。

const SimpleTest = artifacts.require('BlockchainNoteService')
let note_id = 7777777
let note_title = "这是标题"
let note_content = "这是内容"
let simpleTestIns = null
contract('BlockchainNote', (accounts) => {
it('check service deploy', async () => {
simpleTestIns = await SimpleTest.deployed()
})
it('check service add', async () => {
第1个测试:调用editNote(id, title, content)函数,参数为3-5行定义的参数,发布新的云笔记
await simpleTestIns.editNote(note_id, note_title, note_content)
})
it('check service get', async () => {
/* ########## Begin ########## */
第2个测试:调用getNote(id)函数,获得刚才发布的云笔记,并用value保存 // const value = ...
const value = await simpleTestIns.getNote(note_id)
使用断言测试value的值,value[0]为标题,value[1]为内容
//检测输出的标题和原标题相同
assert.equal(value[0], note_title)
assert.equal(value[1], note_content)
//检测输出的内容和原内容相同
/* ########## End ########## */
})
})






我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o