我想在我的网站上接受Ethereum,但找不到如何做到这一点的信息。我已经接受比特币了。有了比特币,就很容易将独特的比特币地址与订单号联系起来。当我看到传入的交易时,我知道客户试图支付的订单号。但比特币与each之间的区别在于,不建议在每次新交易中使用新账户。我说的对吗?
如果我有一个帐户为所有的输入付款,我如何才能知道什么订单客户支付?转帐时没有任何付款备忘录或其他信息。
有人能写一个简短的算法或者给出一些想法吗?
我已经有了VPS (Ubintu),使用支持运行。
发布于 2017-01-30 18:22:51
这是一个非常简单的合同,可以给你一些想法。我建议在浏览器中使用它。
它使用orderNumber记录一个订单来识别它们。假定orderNumber来自合同以外的订单处理.这是一个参考资料,你可以用来看多少埃斯是从谁发送的。
提款功能让我们合同所有者提取资金。
由于您是新来的,我将指出,您必须将Eth发送到应付款recordOrder()函数,但不能将Eth发送到其他不可支付的函数。您可能会发现自己错过了这一步,并得到了“无效跳转”错误。订单编号是十六进制格式,例如"0x1“。您将在javascript端完成这些转换。
匆匆忙忙地想出了一个例子,把付款和订单号码相匹配。没有保修。:-)
pragma solidity ^0.4.6;
contract Order {
address public owner;
struct OrderStruct {
address sender;
uint amountReceived;
}
mapping(bytes32 => OrderStruct) orderStructs;
event LogWithdrawal(uint amount);
event LogOrder(address sender, bytes32 orderNumber, uint amount);
modifier onlyOwner {
if(msg.sender != owner) throw;
_;
}
function recordOrder(bytes32 orderNumber) payable returns(bool success) {
if(msg.value==0) throw;
orderStructs[orderNumber].sender = msg.sender;
orderStructs[orderNumber].amountReceived = msg.value;
LogOrder(msg.sender, orderNumber, msg.value);
return true;
}
function getOrder(bytes32 orderNumber) constant returns(address sender, uint amount) {
return(orderStructs[orderNumber].sender, orderStructs[orderNumber].amountReceived);
}
function withdrawFromContract(uint amount) onlyOwner returns(bool success) {
if(amount > this.balance) throw; // not enough money
if(msg.sender.send(amount)) {
LogWithdrawal(amount);
return true;
} else {
throw;
}
}
}
希望能帮上忙。
或者,盲目地接受付款,只需跟踪谁派了Eth。
pragma solidity ^0.4.6;
contract Payments {
address public owner;
mapping(address => uint) amountReceived;
event LogWithdrawal(uint amount);
event LogPayment(address indexed sender, uint amount); // indexed means javascript can filter by user and get a history
modifier onlyOwner {
if(msg.sender != owner) throw;
_;
}
function Payments() {
owner = msg.sender; // whomever deploys this contract is the privileged "owner" address
}
function pay() payable returns(bool success) {
if(msg.value==0) throw; // can't pay "nothing"
amountReceived[msg.sender] += msg.value; // just a running total of receipts
LogPayment(msg.sender, msg.value); // transaction log of all receipts
return true;
}
function getReceived(address user) constant returns(uint received) {
return amountReceived[msg.sender]; // total sum of all-time receipts from this user
}
function withdrawFromContract(uint amount) onlyOwner returns(bool success) {
if(amount > this.balance) throw; // not enough money
if(msg.sender.send(amount)) {
LogWithdrawal(amount);
return true;
} else {
throw;
}
}
}https://ethereum.stackexchange.com/questions/11787
复制相似问题