forked from dmnyc/BITNATION-Constitution
-
Notifications
You must be signed in to change notification settings - Fork 0
/
profit-share.sol
93 lines (79 loc) · 2.92 KB
/
profit-share.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
This is a profit sharing contract. In order to be sure that shareholders are active, deploy periodically this contract and ask
for shareholders who want to receive the profit to ping this contract. Their address will be added. All ether sent to the
contract is automatically disbursed among all active shareholders, in proportion to their share. Tokens can also be disbursed
using a separate function.
*/
contract owned {
address public owner;
function owned() {
owner = msg.sender;
}
modifier onlyOwner {
if (msg.sender != owner) throw;
_
}
function transferOwnership(address newOwner) onlyOwner {
owner = newOwner;
}
}
contract token {
mapping (address => uint256) public balanceOf;
function transfer(address _to, uint256 _value);
}
contract profitSharing {
mapping (address => uint) public holderId;
ActiveHolder[] public holders;
token public sharesTokenAddress;
struct ActiveHolder {
address holder;
string name;
uint lastSeen;
}
function profitSharing(address sharesAddress, string ownerName){
sharesTokenAddress = token(sharesAddress);
holders[0] = ActiveHolder({holder: msg.sender, name: ownerName, lastSeen: now});
}
/*make active Member*/
function activateMe(string name) {
uint id;
if (holderId[msg.sender] == 0) {
holderId[msg.sender] = holders.length;
id = holders.length++;
holders[id] = ActiveHolder({holder: msg.sender, name: name, lastSeen: now});
} else {
id = holderId[msg.sender];
ActiveHolder h = holders[id];
h.name = name;
h.lastSeen = now;
}
}
function (){
uint totalShares = 0;
for (uint i = 0; i < holders.length; ++i) {
ActiveHolder h = holders[i];
uint holderBalance = sharesTokenAddress.balanceOf(h.holder);
totalShares += holderBalance;
}
for (i = 0; i < holders.length; ++i) {
h = holders[i];
holderBalance = sharesTokenAddress.balanceOf(h.holder);
h.holder.send(msg.value * holderBalance/totalShares);
}
}
function distributeToken(address tokenToDistributeAddress){
uint totalShares = 0;
token tokenToDistribute = token(tokenToDistributeAddress);
uint totalBalance = tokenToDistribute.balanceOf(this);
for (uint i = 0; i < holders.length; ++i) {
ActiveHolder h = holders[i];
uint holderBalance = sharesTokenAddress.balanceOf(h.holder);
totalShares += holderBalance;
}
for (i = 0; i < holders.length; ++i) {
h = holders[i];
holderBalance = sharesTokenAddress.balanceOf(h.holder);
tokenToDistribute.transfer(h.holder, msg.value * holderBalance/totalShares);
}
}
}