区块链是分布式系统,各个节点是分布式分类账本,其不只记录其他节点传递来的信息。作为共识系统的一部分,其必须确保记录的交易已经完成,与共识相匹配。
智能合约是运行在区块链系统可复制、共享账本上的计算机程序,可以处理信息,接收、储存和发送价值。基于区块链技术的智能合约,不仅可以发挥智能合约在成本效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰。将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可跟踪、不可篡改。同时,由区块链自带的共识算法构建出一套状态机系统,使智能合约能够高效地运行。
如果把区块链看作是一个数据库,智能合约就是能够使区块链技术应用到现实中的应用层,是利用计算机代码构建并存储在区块链中的去中心化协议,一旦满足代码所设定的条件便会自动触发合约执行。可以说,智能合约与区块链技术两相成全,前者拓展了后者的应用领域,后者保证了前者的性能。
//八方向的边界填充算法
void WaterBoundaryFill8(int x,int z,float boundaryHeight)
{
int index=x+z*(m_GridNumX+1);
if(m_VerticesFlag[index])
return;
float height=GetHeight(x,z);
if(height<=boundaryHeight)
{
m_VerticesFlag[index]=true;
float difference=Mathf.Clamp(boundaryHeight-height,0,maxWaterDepth);
m_VerticesAlpha[index]=Mathf.Clamp01(difference/maxWaterDepth);
if(x+1<m_GridNumX+1&&x-1>=0&&z+1<m_GridNumZ+1&&z-1>=0)
{
WaterBoundaryFill8(x+1,z,boundaryHeight);
WaterBoundaryFill8(x-1,z,boundaryHeight);
WaterBoundaryFill8(x,z+1,boundaryHeight);
WaterBoundaryFill8(x,z-1,boundaryHeight);
WaterBoundaryFill8(x-1,z-1,boundaryHeight);
WaterBoundaryFill8(x+1,z-1,boundaryHeight);
WaterBoundaryFill8(x-1,z+1,boundaryHeight);
WaterBoundaryFill8(x+1,z+1,boundaryHeight);
}
}
}
float GetHeight(int x,int z)
{
float height=float.MinValue;
Vector3 centerOffset=new Vector3(-m_GridNumX0.5f,0,-m_GridNumZ0.5f);
Vector3 worldPos=GetVertexLocalPos(x,z,centerOffset)+transform.position;
worldPos.y+=100.0f;
RaycastHit hit;
if(Physics.Raycast(worldPos,-Vector3.up,out hit,200.0f))
{
height=hit.point.y;
}
else
{
//LogSystem.DebugLog("Physics.Raycast失败,请检查是否有Collider.x:{0}z:{0}",x,z);
}
return height;
}