什么是DAPP
根据David Johnston在文章DavidJohnstonCEO/DecentralizedApplications里的定义,只有当满足以下所有条件时,一个应用才可以称之为DAPP。
应用必须完全开源、自治并且没有一个实体控制着该应用的大部分代币(Token)。该应用必须能够根据市场的反馈及技术要求进行升级,但是升级必须由应用的用户达成共识之后才可以进行;
应用的数据必须加密后存储在公开的区块链上;
应用必须拥有代币机制(可以使用已存在的代币或者新发行一种内置代币),矿工或者应用维护节点需要得到代币奖励;
应用代币的产生必须依据标准的加密算法,有价值的节点可以根据该算法获取应用的代币奖励。
泰山众筹的基本概念
1、四进一出:当众筹活动到第四期成功的时候,第一期参与众筹的粉丝就会出局,从而获的奖励,当第五期众筹成功的时候,第二期参与的粉丝出局,获得出局奖励,以此类推,直至众筹活动结束或失败。
2、倍利复增:每完成一期众筹活动的时候,下一期将增长30%的众筹资产
3、爆仓重生:众筹活动时间内,无法完成众筹,则会众筹失败,那就视为爆仓,将重新开启第一期循环。
与from表单交互
定义表单项的onchange事件函数,该函数把表单项的值设置到状态变量中
handleChange=(e,{name,value})=>this.setState({[name]:value})
然后写一个函数来看看是否触发了按钮:
handleCreate=()=>{
let{active,projectName,targetMoney,supportMoney,duration}=this.state
console.log('projectName:',projectName)
console.log('targetMoney:',supportMoney)
}
定义表单提交函数
handleCreate=async()=>{
let{active,projectName,targetMoney,supportMoney,duration}=this.state
console.log('projectName:',projectName)
console.log('targetMoney:',supportMoney)
this.setState({active:true})
try{
let res=await createFunding(projectName,targetMoney,supportMoney,duration)
alert('创建合约成功!n')
this.setState({active:false})
}catch(e){
this.setState({active:false})
console.log(e)
}
}
在interaction.js文件中定义createFunding方法,并导出该方法。
let createFunding=(projectName,targetMoney,supportMoney,duration)=>{
return new Promise(async(resolve,reject)=>{
try{//调用创建方法
let accounts=await web3.eth.getAccounts()
let res=await fundingFactoryInstance.methods.createFunding(projectName,targetMoney,supportMoney,duration).send({
from:accounts[0],
})
resolve(res)
}catch(e){
reject(e)
}
})
}
5.在AllFundingTab添加表单项,在render方法中把状态变量的数据结构出来
render(){
return(
<div>
<CardList details={this.state.allFundingDetails}/>
<div>
<h3>参与众筹</h3>
<Dimmer.Dimmable as={Segment} dimmed={this.state.active}>
<Dimmer active={this.state.active} inverted>
<Loader>支持中</Loader>
</Dimmer>
<Form onSubmit={this.handleInvest}>
<Form.Input type='text' value={''} label='项目名称:'/>
<Form.Input type='text' value={''} label='项目地址:'/>
<Form.Input type='text' value={''} label='支持金额:'
labelPosition='left'>
<Label basic>¥</Label>
<input/>
</Form.Input>
<Form.Button primary content='参与众筹'/>
</Form>
</Dimmer.Dimmable>
</div>
</div>
)
}