1. 首页
  2. 技术分享

增强世界的连续性

让我们先介绍一下这篇文章。请假设我们生活在未来5分钟的世界里,我们已经找到了AR植入物或非荒谬的眼镜。但是,现在你的移动外脑(手机)将起作用。

我将首先说我现在感觉已经被抢了一段时间了。缺了点什么。我被告知,未来将是一个后期资本主义国家,我将在阴郁的菲利普K.迪克城市蔓延中淹没交互式3D广告。我们很接近。我建造和交易想象中的互联网硬币,为一家跨国科技集团工作,在我的口袋里放一台超级电脑,还有一小撮非人类居住在我的房子里。但我知道我们可以做得更好。另外<* handwaving以更分散的方式强化*>!自由市场持续广告现在应该无处不在。由于似乎没有人有兴趣将其变为现实,我想我将不得不加强我的游戏。改变从我做起。

现代AR最常见的陷阱是缺乏与现实甚至本身的连续性。我相信这种脱节可以通过现代公共区块链来解决。为了使系统足够健壮以便广泛使用,它将需要分布式文件存储以便快速访问广告,广告空间的公共市场以及广告的简单可识别目标(投影,显然你是真正的目标)。而且不言而喻,这一切都需要是开源的。考虑到这些要求:让我们这样做!

增强世界的连续性
伯恩斯资本:研究与开发

对于这个概念证明,我们将使用Burns Capital。如果您(读者)能够在世界任何地方按需查看此徽标,那么成功标准就是如此。我使用一个简单的图像进行演示,但使用相同的方法制作3d对象和任何其他aframe.io对象同样容易。希望在另一篇文章中介绍这一点。此外,这是生活代码,因此在您阅读本文时可能会更新。repo链接位于底层,它是开源的,可以帮助自己获得最新的代码库。

如果你不耐烦; 在您的手机上,请访问https://tinyurl.com/y8o5f4ml

并指出你的手机:

增强世界的连续性
网络上的以太坊经典广告

系统总览

增强世界的连续性
系统总览

在我们深入研究系统的编码方面之前,我们先简单介绍一下网络设计。1)用户从ipfs提供轻量级Web应用程序,2)网页使用公共API访问ETC网络上的合同以获取有关目标的信息,4)然后从ipfs检索广告并显示5)在目标。我称之为零重量架构。

潜水深!

文件存储:

这是四个要求中最容易的一个。如果您不熟悉行星际文件系统(IPFS),请停止正在处理的所有内容,了解它并立即开始使用它。将文件添加到ipfs时,会为其指定唯一标识符。此标识符用于将文件分发到其他ipfs节点并根据需要调用它。在我们的案例中超级有用。

$ ./ipfs.exe add~ / Pictures / bclogo.png
添加了QmRYrsq4uHk3AuVapdyoPtbF4zuzw7dbkc4r8HBKssB3De bclogo.png

BC标志现在可以在任何地方使用!!!!!! 互联网已经存在了一段时间,但我们现在可以使用我们机器上的ipfs API点或使用其ID连接到ipfs系统的任何其他机器来访问我们的独特图像。该文件也可在ipfs api点公开获取,位于:https://ipfs.io/ipfs/QmRYrsq4uHk3AuVapdyoPtbF4zuzw7dbkc4r8HBKssB3De

分布式访问

不断绕过QmRYrsq …… 是痛苦的,并且规模很小。作为区块链建筑师的交易,这显然是我宝贝的工作:以太坊经典!我们需要一份合同,我们可以写一次,并多次阅读。如果没有人能够在我允许的情况下覆盖我的徽标,那也很好。其他很好的功能包括:电影和游戏等公共评级系统,转售我的广告空间的能力,以及一对一的映射。为此,我们将创建一个结构和一个枚举。

枚举等级{G,PG,PG13,R,NC17}
struct arTarget {
字符串标识;
博尔拥有;
地址所有者;
bool forSale;
uint价格;
评级等级;
}

为简单起见,我们将只使用uint8。这为我们提供了255个独特的座位来映射广告,这些广告应该足以展示这个概念。

mapping(uint8 => arTarget)公共目标;

有点目标

我们将使用3×3矩阵格式,无需错误检测或纠正,允许识别多达64种不同的标记。为方便起见,可以从此链接下载3×3目标。是的,我们只使用255个可用座位中的64个。在真实的未来世界生产环境中,我们可以轻松地将其扩展到更多座位并使用稍大的网格。我们的想法是避免像qr代码那样过于复杂的结构,并保持人类可读性,如果需要可绘制的话。

从目标中读取数据

我们需要一个简单的getter来允许用户访问存储的信息。我们需要的两个最重要的信息是图像标识符和内容评级。某些保姆监控软件应该能够读取内容评级并阻止敏感观众在需要时看到年龄不合适的项目(超出范围)。

function getLogo(uint8 _scan)public view returns(string ipfs,rating rating){ 
ipfs = targets [_scan] .logo;
rating = targets [_scan] .rating;
return(ipfs,rating);}

购买(和出售)座位

这是事情变得有点棘手的地方。我们需要一种方法让业主更新座位,新用户购买座位,以及购买和出售。

函数updateLogo(uint8 _arID,string _ipfs)应付公共收益(bool成功){}

我们将使用唯一标识符获取ID和字符串。此功能是应付的,因此我们可以允许用户购买座位。如果一切顺利,我们将返回一个成功的结果。

最简单的情况是,一个座位不是拥有的,有人想占用它; 我们让他们。这看起来像这样:

if(!targets [_arID] .owned){ 
targets [_arID] .logo = _ipfs;
目标[_arID] .owned = true;
success = true;}

为了节省空间,我们将结合所有者可以执行的操作以及陌生人可以对无主资产执行的操作。只需通过您需要的一切来申请座位

if(targets [_arID] .owned && msg.sender == targets [_arID] .owner ||!targets [_arID] .owned){ 
targets [_arID] .logo = _ipfs;
目标[_arID] .forSale = _forSale;
目标[_arID] .price = _price;
success = true;}
}

如果座位是出售而陌生人发送足够的以太购买座位,我们将向所有者付款并更改座位信息。

if(targets [_arID] .owned && msg.sender!= targets [_arID] .owner && targets [_arID] .forSale && msg.value> = targets [_arID] .price){ 
targets [_arID] .owner.transfer( msg.value);
目标[_arID] .owner = msg.sender;
目标[_arID] .logo = _ipfs;
目标[_arID] .forSale = _forSale;
目标[_arID] .price = _price;
success = true;
}

这个用途很简单😊

警察!

由于我不想主持分布式粉碎电影库或任何其他令人反感的内容,我们还会添加评级审查委员会,并让他们能够删除内容。如果他们愿意,他们可以自由地制作自己的系统,但我不会同心支持它。因此,为了实现这一目标,我们将警察联盟的帐户地址映射到布尔变量(警察是真的,非警察是假的),并创建一个我可以添加到某些功能的修饰符,只有内容警察应该能够做到。并且本着透明的精神,每当猪吃掉东西时,我们都会发布一个事件。它将报告操作(“已删除项目”),公共服务方删除了内容,如果我们想要捕获原因,则报告注释字符串。

mapping(address => bool)contentPolice; 
modifier onlyContentPolice(){
要求(contentPolice [msg.sender]);
_;
}
事件尖叫(字符串动作,地址官,字符串注释);

为了给我们的思想警察做点什么,我们将给他们这个功能:

function clearSeat(uint8 _seat,string _comment)public onlyContentPolice return(bool success){ 
targets [_seat] .owned = false;
目标[_seat] .logo =“”;
发出尖叫声(“删除”,msg.sender,_comment);
返回true;
}

现在我们的广告有一个简短的公共存储数据库合同!

使用您最喜欢的区块链界面进行编译和部署,并准备好了!

AR部分!

欢迎来到明天的世界!Aframe.io和AR.js将为我们做所有繁重的工作。这些开源项目正在努力通过构建webVR框架工作将vr / ar引入大众。有关使用10行代码制作AR项目的快速介绍,请访问:http//aframe.io/blog/ar.js

<免责声明:我不是前端开发人员>

我们将web3.js添加到ar演示中,以便我们可以与区块链进行交互。为此,我们需要将以下内容添加到html:

<script type =“text / javascript”src =“https://rawgit.com/ethereum/web3.js/develop/dist/web3.min.js”> </ script> 
<script>
console.log(“o建立WEB3”)
var uri ='http:// localhost:8545';
var web3 = new Web3(new Web3.providers.HttpProvider(uri));
的console.log(WEB3);

当然; 将uri更改为您首选的api点。对于演示页面,我将使用etc commonwealth public api point。添加合同逻辑:

console.log(“o设置合同”)

var contractAddress =“0x9868a675D36E2554F559771539F00Ed188A33e69”;
var abiArray = [{“constant”:false,“inputs”:[{“name”:“_ seat”,“type”:“uint8”},{“name”:“_ comment”,“type”:“string” }], “名称”: “clearSeat”, “输出”:[{ “名称”: “成功”, “类型”: “布尔”}], “应付”:假 “stateMutability”: “nonpayable”,”类型 “:” 功能 “},{” 恒定 “:假” 输入 “:[{” 名称 “:” _干旱”, “类型”: “UINT8”},{ “名称”: “_ IPF问题”, “类型” : “字符串”},{ “名”: “_可供出售”, “类型”: “布尔”},{ “名”: “_价格”, “类型”: “uint256”},{ “名”: “_等级” ,“类型”:“UINT8”}], “名称”: “updateLogo”, “输出”:[{ “名称”: “成功”, “类型”: “布尔”}], “应付”:真 “stateMutability”:“应付”, “类型”: “功能”},{ “恒定”:真 “输入”:[{ “名称”: “_扫描”, “类型”: “UINT8”}], “名称”: “getLogo”, “输出”:[{ “名称”: “IPF问题”, “类型”: “串”},{ “名称”: “等级”, “类型”: “UINT8”}], “应付”:假“stateMutability “:” 查看 “ ”类型“: ”功能“},{ ”恒定“:真 ”输入“:[{ ”名称“: ”“, ”类型“: ”UINT8“}], ”名称“:”目标“”输出 “:[{” 名称 “:” 标识 “ ”类型“: ”串“},{ ”名称“: ”拥有“, ”类型“: ”布尔“},{ ”名称“: ”所有者“,”键入 “:” 地址 “},{” 名 “:” 可供出售 “ ”类型“: ”布尔“},{ ”名“: ”降价“, ”类型“: ”uint256“},{ ”名“:”等级 “ ”类型“: ”UINT8“}], ”应付“:假 ”stateMutability“: ”查看“, ”类型“: ”功能“},{ ”恒定“:真 ”输入“:[{”命名 “:””, “类型”: “地址”}], “名称”: “contentPolice”, “输出”:[{ “名称”: “”, “类型”: “布尔”}], “应付” :假,”stateMutability “:” 视图 “ ”类型“: ”功能“},{ ”输入“:[], ”应付“:假 ”stateMutability“: ”nonpayable“, ”类型“: ”构造“},{” 匿名“:假” 输入 “:[{” 索引 “:假,” 姓名 “:” 动作 “ ”类型“: ”串“},{ ”索引“:假, ”姓名“: ”人员“,” 类型“:” 地址 “},{” 索引 “:假的,” 名 “:” 评论”, “类型”: “串”}], “名”: “尖叫”, “类型”: “事件”}];匿名 “:假的,” 输入 “:[{” 索引 “:假的,” 名 “:” 行动 “ ”类型“: ”串“},{ ”索引“:假的, ”名“: ”官“,”类型 “:” 地址 “},{” 索引 “:假的,” 名 “:” 评论”, “类型”: “串”}], “名”: “尖叫”, “类型”: “事件”}] ;匿名 “:假的,” 输入 “:[{” 索引 “:假的,” 名 “:” 行动 “ ”类型“: ”串“},{ ”索引“:假的, ”名“: ”官“,”类型 “:” 地址 “},{” 索引 “:假的,” 名 “:” 评论”, “类型”: “串”}], “名”: “尖叫”, “类型”: “事件”}] ;
  var arContract = web3.eth.contract(abiArray).at(contractAddress);

当观众加载时,我们想要调用“getLogo”函数来获取我们的广告并将它们分配给各自的目标。如果没有人是对象的所有者,我们将显示“待售标志”

console.log(“o分配资产”); 
for(i = 0; i <6; i ++){
console.log(“来自合同的回复”+ arContract.getLogo(i)[0]);
if(arContract.getLogo(i)[0]!=“”){
document.getElementById(“tgt”+ i).innerHTML =“<a-box src = \”https://gateway.ipfs.io/ipfs/“+ arContract.getLogo(i)[0] +”\“> </一箱>”;
} else {
document.getElementById(“tgt”+ i).innerHTML =“<a-box src = \”https://gateway.ipfs.io/ipfs/QmVGMspGVeNB4tyVPGToUXnGoaqg3iKgYts1DMq24pujfV \“> </ a-box>”;
}
}

更多来

这是一个非常简单的系统,用于演示目的。不要让它的简单性欺骗你,这是公共区块链上的实时系统。可以使用github repo中的abi找到并与以下内容进行交互:0x9868a675D36E2554F559771539F00Ed188A33e69。

干杯!

原创文章,作者:Eric,如若转载,请注明出处:https://ipfsdrop.com/view/zengqiangshijiedelianxuxing/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

(+86)18301922335

在线咨询:点击这里给我发消息

邮件:haskell@freechains.cn

工作时间:7×24小时

QR code